2017-04-16 1 views
0

Je souhaite avoir une instance d'une classe dans une autre. Si je crée l'objet dans le programme principal, tout va bien. Si je retire un commentaire en face de la ligne 13, je reçois un messageInstanciation C++

g++ MyMWE.cpp 
MyMWE.cpp:13:14: error: expected identifier before string constant 
    delay1 DTT("DELAY1", 6); 
      ^

Quelle est la différence si j'instancier dans le programme principal ou dans la classe? Et, quel identificateur est attendu par le compilateur? Qu'est-ce que j'ai tort?

#include <string> 

class delay1 { 
public: 
    delay1(std::string name, int t_){} 
    int t; 
}; 

class delay2 { 
public: 
    delay2(std::string name, int t_){} 
    int t; 
// delay1 DTT("DELAY1", 6); 
}; 

int main(int argc, char* argv[]) { 
    delay1 DTT("DELAY1", 6); 
    return(0); 
} 

Répondre

2

en classe initializers doit utiliser la syntaxe d'initialisation = ou {}:

class delay2 { 
    // ... 
    delay1 DTT{"DELAY1", 6}; 
}; 
+0

Merci, cela fonctionne, mais il a besoin d'ajouter "std = C++ 11". Sinon, je reçois le message d'erreur "Liste d'initialisation étendue uniquement disponible avec -std = C++ 11". Pourriez-vous s'il vous plaît donner un pointeur, quel est l'effet sans le commutateur ou en utilisant d'autres normes? – katang

+0

@katang C++ 03 ne prenait pas en charge les initialiseurs en classe. Vous pouvez uniquement initialiser les membres dans la liste d'initialisation des membres du constructeur. – Quentin