2013-03-24 24 views
14

Ho una classe come ad esempio:Errore: Assegnazione a un array da una lista di inizializzazione

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; 
} 

Restituisce:

[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

ho guardato in linea un po 'e davvero non riuscivo a trovare un modo per aggirare questo. Preferirei non modificare la classe all'interno del suo file di classe (kinda sconfigge lo scopo). Qualsiasi aiuto?

Nota: la classe è in un file di progetto separato

liste

risposta

18

Initializer sono solo utilizzabili durante l'inizializzazione.

Se si desidera utilizzare std::initializer_list dopo l'inizializzazione:

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

Non è possibile inizializzare un elenco esteso a meno che non sei in C++ 11.

E se fossi in te una buona abitudine è quello di utilizzare * invece di vuoto "[]" e allocare la memoria quando si conosce la dimensione (con nuove o malloc). dIl tipo di ritorno sul tuo programma è un puntatore di mate.

E si sta dando un elenco completo di un solo membro del vettore.

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

che rende più senso.

Cercare di incapsulare e l'uso/creare funzioni di inizializzazione che vi aiuteranno a fare anche questo. C++ metterà tutti 0 all'inizio, ma si può fare una funzione e chiamare:

dialog People("the_atributes_are_here"). 

E 'una buona pratice per rendere i dReturnType funzioni private e di uso per Acess che i dati e inserire/modificare le cose. Ma dipende da te.

Problemi correlati