Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

C++ - Inicjalizacja tablicy struktur

Alttair 28 Apr 2015 08:50 1146 3
  • #1
    Alttair
    Level 9  
    Mam np. następującą strukturę:

    Code: cpp-qt
    Log in, to see the code


    Teraz deklaruję oraz inicjalizuję tablicę struktur o nazwie np. nokia:

    Code: cpp-qt
    Log in, to see the code




    A jak najwygodniej zrobić podobną inicjalizację, jeżeli mam wskaźnik na typ telefony * i zaalokowaną pamięć na 3 elementy tego typu?

    Code: cpp-qt
    Log in, to see the code


    Czy jest jakiś wygodniejszy sposób niż, pisanie cały czas:
    Code: cpp-qt
    Log in, to see the code

    itd..

    Zaskoczył mnie jeszcze error kompilatora gdy piszę:
    Code: cpp-qt
    Log in, to see the code

    '=' : cannot convert from 'const char [8]' to 'char [20]' There is no context in which this conversion is possible
  • #2
    Dżyszla
    Level 42  
    O ile pierwszy przypadek, to po prostu bardziej dyrektywa parsera, to gdy już robimy dynamicznie, wówczas takiego ładnego zapisu nie ma. Możesz co prawda wrzucić w jeden obszar pamięci wszystkie dane "na raz" (korzystając z adresu pierwszej zmiennej tablicy), ale taki zapis byłby raczej nieczytelny.
    Jeśli chcesz zrobić to nieco ładniej, to napisałbym funkcję wypełniającą pola, której przekażesz indeks i wartości. Ale to taka sobie kosmetyka. Innym rozwiązaniem byłoby zapisanie danych w postaci pliku (np CSV; mógłby być zaszyty w zasobach lub nawet wprost w kodzie) i wykonanie parsera, który odczyta te dane i umieści w dynamicznie utworzonej tablicy.
  • #3
    -psiak-
    Level 32  
    http://ideone.com/iImEGU
    Code: cpp
    Log in, to see the code

    Powyższe nie zmienia faktu że najlepiej zastanowić się nad wczytaniem z pliku zewnętrznego, jak to wspomniano w poście wyżej.
  • #4
    mcvsama
    Level 16  
    Quote:
    wsk[0]->marka = "cos tam";


    "cos tam" jest napisem stałym typu const char[8], próbujesz przypisać wskaźnik do tego napisu do zmiennej char[20]. Mają inne typy - inne rozmiary - i nie ma wbudowanego operatora =, który by implementował kopiowanie. Zamiast tablic znaków może lepiej użyć std::string? Wtedy takie coś by zadziałało, bo std::string ma operator=(const char*);