2013-03-24 15 views
14

Mam klasy takich jak:Błąd: Przypisywanie do tablicy z listy inicjatora

class dialog 
{ 
    public: 
    double dReturnType[][5][3]; 
}; 

 

#include <cstdlib> 
#include <iostream> 
include <string> 

using namespace std; 
#include "dialog.h"; 

int main(int argc, char *argv[]) 
{ 
    dialog People; 
    People.dReturnType[0][1] = {1.2,2.3,6.6}; 
    return 0; 
} 

Zwraca:

[Warning] extended initializer lists only available with -std=c++11 or -std=gnu11 [enabled by default] [Error]: assigning to an array from an initializer list

Szukałem go trochę online i naprawdę nie mogłem znaleźć sposobu na obejście tego. Wolałbym nie edytować klasy w jej klasie na pliku klasy (w pewnym sensie porażka celu). Jakaś pomoc?

Uwaga: klasa jest w oddzielnym pliku projektu

listy

Odpowiedz

18

initializer to tylko użyteczny podczas inicjalizacji.

Jeśli chcesz użyć std::initializer_list po inicjalizacji:

auto init = std::initializer_list<double>({1.2,2.3,6.6}); 
std::copy(init.begin(), init.end(), your_array); 
0

Nie można zainicjować rozszerzoną listę, chyba że jesteś na C++ 11.

A jeśli byłem tobą, dobrym nawykiem jest użycie * zamiast pustego "[]" i przydzielenie pamięci, gdy znasz rozmiar (z nowym lub malloc). d Wpis w programie jest wskaźnikiem mat.

I podajesz pełną listę tylko jednemu członkowi wektora.

People.dReturnType[0]={1.2,2.3,6.6}; 

To ma więcej sensu.

Spróbuj hermetyzować i używać/tworzyć funkcje inicjalizacyjne, które pomogą ci to zrobić. C++ będzie umieścić wszystkie 0 na początku, ale można zrobić funkcję i zadzwonić:

dialog People("the_atributes_are_here"). 

To dobry zarażenia się wirusem HIV, aby uczynić dReturnType funkcje prywatnych oraz wykorzystuje do acess to dane i wstawić/zmienić rzeczy. Ale to zależy od ciebie.

Powiązane problemy