Wskaźnik na tablice struktur dynamicznych - problem z inicjalizacją, pobieraniem pól do danego eleme

0

Witam, mam następujący problem, konkretne pytania zadam w komentarzach w Listingu(cały program)

 #include <iostream>
#include <iostream>
#include <cstring>

struct Batonik
{ 
	std::string brand;   
	double weight;
	int calories;
};

int main()
{
	using namespace std;

	Batonik *snack = new Batonik [3];         
//Próbowałem zanimalizować wskaźnik snack typu Batonik podanymi wartościami ale kompilator zgłasza błąd, nie wiem dlaczego bo chyba konstrukcja jest poprawna
      *snack[3] =                                               
	{
		{"Mocha Much", 2.3, 350},
		{"Milkiway", 1.8, 24}
	};
	
// tak samo tutaj próba nadania wartości 2 poszczególnych pól tablicy dynamicznej snack
	cout << "Podaj marke: ";
    getline(cin, snack[2]->brand);
	cout << "Podal liczbe kalorii: ";
    cin >> *(snack[2]->calories);
	cout << "Podaj wagae: "; 
    cin >> *(snack[2]->weight);
    cout << endl;

// tutaj też komparator zgłasza problem podczas próby dostania się do poszczególnych pół
	cout << "Marka 1: " << snack[0]->brand << endl;
	cout << "Kaloriie 1: " << snack[0]->calories << endl;
	cout << "Waga 1: " << snack[0]->weight << endl;
	cout << endl;
        cout << "Marka 2: " << snack[1]->brand << endl;
	cout << "Kaloriie 2: " << snack[1]->calories << endl;
	cout << "Waga 2: " << snack[1]->weight << endl;
	cout << endl;
	cout << "Marka 3: " << snack[2]->brand << endl;
	cout << "Kaloriie 3: " << snack[2]->calories << endl;
	cout << "Waga 3: " << snack[2]->weight << endl;
	
	delete [] snack;

       cin.get();
	cin.get();
	return 0;
}

Proszę o wyrozumiałość, to jest mój pierwszy kontakt z wskaźnikami. Dziękuje za wszelkie rady.

0

Zmieniam pytanie odnośnie pierwszego pytania

//Próbowałem zanimalizować wskaźnik snack typu Batonik podanymi wartościami ale kompilator zgłasza błąd, nie wiem dlaczego bo chyba konstrukcja jest poprawna
      *snack[3] =                                               
        {
                {"Mocha Much", 2.3, 350},
                {"Milkiway", 1.8, 24}
        }; 

Próbowałem nadać wartość wskazywanego przeze mnie adresu snack[3], niepotrzebnie użyłem operatora dereferencij, już poprawiam i zmieniam problem(bo chyba tak w żaden sposób niezainicjalizuje wszystkich pół tablicy).

 
       snack[0] = {"Mocha Much", 2.3, 350};
       snack[1] =  {"Milkiway", 1.8, 24};
        

W takim razie czy jest możliwość zadeklarowania wszystkich pól struktury w odpowiednim elemencie tej tablicy dynamicznej na raz? Czy murze odnosić się do poszczególnych pól tzw. snack[0]->brand = "Mocha Much" ?

0

Aj w przypadku tablic dynamicznych, poszczególne elementy traktujemy jako normalne tablice wiec operator -> zastąpiłem operator kropka i tam samym pozbyłem się wiekszości błędów. Ale pytanie z 2 postu jest jak najbardziej aktualne. Daj poprawiony kod:

#include <iostream>
#include <cstring>

struct Batonik
{ 
	std::string brand;    //brand z angielskiego marka
	double weight;
	int calories;
};

int main()
{
	using namespace std;

	Batonik *snack = new Batonik [3];         //iniclailzacija podczas deklaracji zmiennej snack typu batonik
	snack[0] = {"Mocha Much", 2.3, 350};
	snack[1] = {"Mocha Much", 2.3, 350};
	
	cout << "Podaj marke: ";
    getline(cin, snack[2].brand);
	cout << "Podal liczbe kalorii: ";
    cin >> snack[2].calories;
	cout << "Podaj wagae: "; 
    cin >> snack[2].weight;
    cout << endl;
	cout << "Marka 1: " << snack[0].brand << endl;
	cout << "Kaloriie 1: " << snack[0].calories << endl;
	cout << "Waga 1: " << snack[0].weight << endl;
	cout << endl;
    cout << "Marka 2: " << snack[1].brand << endl;
	cout << "Kaloriie 2: " << snack[1].calories << endl;
	cout << "Waga 2: " << snack[1].eight << endl;
	cout << endl;
	cout << "Marka 3: " << snack[2].brand << endl;
	cout << "Kaloriie 3: " << snack[2].calories << endl;
	cout << "Waga 3: " << snack[2].weight << endl;

    cin.get();
	cin.get();
	return 0;
}
 
0
#include <iostream>
#include <iostream>
#include <cstring>

struct Batonik
{
        std::string brand;
        double weight;
        int calories;
};

int main()
{
        using namespace std;

        Batonik *snack = new Batonik [3];

        snack[0].brand = "Mocha Much";
        snack->weight = 2.3;
        (*(snack)).calories = 350;

        (*(snack + 1)).brand = "Milkiway";
        (snack + 1)->weight = 1.8;
        snack[1].calories = 24;

        cout << "Podaj marke: ";
        getline(cin, snack[2].brand);
        cout << "Podal liczbe kalorii: ";
        cin >> snack[2].calories;
        cout << "Podaj wage: ";
        cin >> snack[2].weight;
        cout << endl;

        cout << "Marka 1: " << snack[0].brand << endl;
        cout << "Kalorie 1: " << snack[0].calories << endl;
        cout << "Waga 1: " << snack[0].weight << endl;
        cout << endl;
        cout << "Marka 2: " << snack[1].brand << endl;
        cout << "Kalorie 2: " << snack[1].calories << endl;
        cout << "Waga 2: " << snack[1].weight << endl;
        cout << endl;
        cout << "Marka 3: " << snack[2].brand << endl;
        cout << "Kalorie 3: " << snack[2].calories << endl;
        cout << "Waga 3: " << snack[2].weight << endl;

        delete [] snack; // Duzy plus za poprawne uzycie delete :)

        cin.get();
        cin.get();
        return 0;
}
0

Batonik (dobre :P), czyli nie ma innej inicializowania wartości zapisu struktur w tablicach dynamicznych jak odpływanie się do każdego konkretnego pola tychże struktur?

Aha i dzięki że pokazałeś rożne konstrukcie, w zasadzie wszystkie poznałem, ale ten zapis wszystkich w jednym miejscu niewątpliwie mi pomoże bo program ten jest dla mnie swego rodzaju notatką

0

Ten zapis int tab[] = {0, 1, 2}; można stosować tylko przy inicjalizacji w momencie definicji zmiennej. Biorąc to pod uwagę, przy dynamicznej alokacji pamięci nie da się spełnić tego warunku.

0

Dzieki byku_guzio, twój post całkowicie wyczerpał przedstawiony przeze mnie problem. Zapisze sobie go nawet jako komentarz w tym programie by mieć to na uwadze. Myśle że temat można zamknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1