私はそのようなクラスのパブリックエリアで次のメソッドを宣言しています:
ヘッダーファイル:
class EntityManager
{
public:
...
template <typename ComponentType>
bool addComponentToEntity(const Entity in_Entity, const shared_ptr<ComponentType> in_ComponentInstance);
...
}
ソースファイル:
template <typename ComponentType>
bool EntityManager::addComponentToEntity(const Entity in_Entity, const shared_ptr<ComponentType> in_ComponentInstance)
{
...
}
それから私はそれをこのように使おうとします:
Entity l_Entity = 1;
shared_ptr<TestComponent> l_TestComponent(new TestComponent());
EntityManager* l_EntityManager = new EntityManager();
l_EntityManager->addComponentToEntity<TestComponent>(l_Entity, l_TestComponent);
これにより、コンパイラは次のように文句を言います。
undefined reference to `bool EntityManager::addComponentToEntity<TestComponent>(unsigned long, boost::shared_ptr<TestComponent>)'|
これはおそらくC++プログラミングの経験があまりないためだと思いますが、関数が未定義である理由がわかりません。EntityManagerクラスの他の関数を呼び出し、完全に機能する他のコードをいくつか省略しました。
また、通常のポインター、参照を使用して関数を書き直し、同じ結果で値を渡すことも試みました。