C ++ - 使用类时未定义的引用问题

时间:2010-10-28 15:36:26

标签: c++ class templates undefined-reference

我正在开发一个小项目,我使用多个类。其中一个类是Menu,它有一个showContainer方法。这是类声明:

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

编译好。我将以下测试添加到项目的main.cpp

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;

这将返回以下编译器错误:

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)'

任何猜测?

感谢您的时间。

3 个答案:

答案 0 :(得分:3)

Menu::showContainer函数模板的定义必须对调用它的代码可见,除非它已针对调用中使用的类型进行了显式实例化。

您可能已在某些实施文件中定义了。

如果是,请将其移至标题中。

干杯&amp;第h。,

答案 1 :(得分:1)

看起来编译器只看到showContainer的声明,而不是编译main.cpp时的定义。请参阅此C++FAQLite文章。

答案 2 :(得分:0)

尝试:

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