2012-02-07 32 views
5
I'm getting an "unresolved external symbol "public:__thiscall hijo<int>::hijo<int>(void)" referenced in function_main 

私は別の大きなプロジェクトで同じエラーが発生していたため、新しいプロジェクトを開始しました。 新しいキーワードを使用してスペースを割り当てようとすると、エラーが発生します。 このエラーがばかげている場合は、最後の月に何もプログラムしていないために私を許してください。テンプレートクラスを使用しているときにリンカーエラーが発生しましたか?

答えて

10

C++のコンパイルモデルの不思議さのために、.hと.cppファイルを非常にきれいにテンプレートクラスに分けることはできません。具体的には、テンプレートクラスを使用するすべての翻訳単位(C++ソースファイル)は、テンプレート定義全体にアクセスできる必要があります。これは言語の変わった奇抜なことですが、残念ながらそれはここにあります。

1つのオプションは、ソースではなくヘッダーファイルに実装を配置し、.cppファイルをまったく持たないことです。たとえば、次のヘッダーがあるとします。

#pragma once 
#ifndef hijo_h 
#define hijo_h 

template <class A> 
class hijo 
{ 
public: 
    hijo(void); 
    ~hijo(void); 
}; 

/* * * * Implementation Below This Point * * * */ 

template <class A> 
hijo<A>::hijo(void) 
{ 
} 
template <class A> 
hijo<A>::~hijo(void) 
{ 
} 

#endif 

+0

「残念ながら、ここに滞在する」 - モジュールを入手するまで。 \ *は指をかぶっています* – Xeo

+0

チャームのように機能していますが、ちょっとした修正が必要でした。 .hファイルにコードを追加するのではなく、.hファイルの最後に.cppファイルを含めました。 両方の部分が同じファイルにある場合と同じ結果になります。 "hijo.cpp" #ifndefのhijo_cpp の#define hijo_cpp と下部 #endifの時で ... は、あなたの答えをありがとう... – HoNgOuRu

+0

なきゃ質問をマークするために8分以上待ちますas answered – HoNgOuRu

関連する問題