2010-10-28 4 views
0

Je travaille sur un petit projet dans lequel j'utilise plusieurs classes. Une de ces classes est Menu, qui a une méthode showContainer. Voici la déclaration de la classe:C++ - Problèmes de référence non définis lors de l'utilisation de classes

class Menu { 
    //snip 
    Menu(); 
    Menu(std::string, std::string, int, int); 
    virtual ~Menu(); 
    //snip 
    /** 
    * Visualiza e providencia navegacao presente num container 
    * @param Container a mostrar 
    * @return Indice seleccionado pelo utilizador 
    */ 
    template <class C> 
    void showContainer(std::list<C>, int, int); 
}; 

Compile bien. J'ai ajouté le test suivant pour main.cpp de projet:

Menu menu; 
Manga* manga1; 
manga1->setCapacidade(60); 
manga1->setCategoria(LongoCurso); 
manga1->setLocalizacao("Norte"); 
manga1->setNumero(143); 
Manga* manga2; 
manga2->setCapacidade(60); 
manga2->setCategoria(LongoCurso); 
manga2->setLocalizacao("Norte"); 
manga2->setNumero(143); 
Manga* manga3; 
manga3->setCapacidade(60); 
manga3->setCategoria(LongoCurso); 
manga3->setLocalizacao("Norte"); 
manga3->setNumero(143); 

std::list<Manga *> teste; 
teste.push_back(manga1); 
teste.push_back(manga2); 
teste.push_back(manga3); 
menu.showContainer(teste, 5, 0); 

return 0; 

Cela renvoie l'erreur du compilateur suivant:

C:\Users\Francisco\workspace_aeda\ProjectoAEDA\Debug/../src/main.cpp:96: undefined reference to `void Menu::showContainer<Manga*>(std::list<Manga*, std::allocator<Manga*> >, int, int)' 

Toutes les suppositions?

Merci pour votre temps.

+1

est 'modèle Menu vide :: showContainer (std :: liste , int, int)' définie dans l'en-tête? –

+0

Oui. Résolu, merci! –

+0

Vous devriez accepter une réponse, alors. –

Répondre

3

La définition du modèle de fonction Menu::showContainer doit être visible pour le code qui l'appelle, à moins qu'elle n'ait été explicitement instanciée pour le type utilisé dans l'appel.

Les chances sont définies dans un fichier d'implémentation.

Si c'est le cas, déplacez-le dans l'en-tête.

Vive & HTH.,

+0

Cette fois, vous étiez le premier à répondre. ':-)' –

+0

J'ai eu de la chance. Je pense que je ferai peut-être ce que font les vrais programmeurs: automatiser la chose. Bien sûr, alors je dois d'abord créer un système expert pour synthétiser les réponses. ;-) –

1

On dirait que le compilateur voit qu'une déclaration de showContainer, et non pas une définition quand il est la compilation main.cpp. Voir article C++FAQLite sur celui-ci.

0

Essayez:

menu.showContainer<Manga*>(teste, 5, 0); 
Questions connexes