0

私は複数のクラスを使用する小さなプロジェクトに取り組んでいます。それらのクラスの1つはMenushowContainerメソッドを持つです。クラス宣言は次のとおりです。

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

何か推測はありますか?

御時間ありがとうございます。

4

3 に答える 3

3

関数テンプレートの定義は、Menu::showContainer呼び出しで使用されるタイプに対して明示的にインスタンス化されていない限り、それを呼び出すコードから見える必要があります。

いくつかの実装ファイルで定義した可能性があります。

その場合は、ヘッダーに移動します。

乾杯&hth。、

于 2010-10-28T15:40:26.613 に答える
1

コンパイラは、main.cppをコンパイルするときに定義ではなく、showContainerの宣言のみを表示しているように見えます。これに関するC++FAQLiteの記事を参照してください。

于 2010-10-28T15:43:48.573 に答える
0

試す:

menu.showContainer<Manga*>(teste, 5, 0); 
于 2010-10-28T15:44:01.590 に答える