テンプレートクラスを前方宣言する必要のあるコードがいくつかあります(または、少なくとも前方宣言を行うと、作業がはるかに簡単になります...)。私が抱えている問題の簡略版を書いたので、ここに表示できます。
template<bool>
class MyTemplateClass;
int main( int argc, char* argv[] )
{
MyTemplateClass<false> myTemp; // error here
myTemp.GetTheValue();
return 0;
}
template<bool bShouldMult>
class MyTemplateClass
{
int m_myint;
float m_myfloat;
public:
MyTemplateClass() : m_myint(5), m_myfloat(3.0f) {}
float GetTheValue()
{
return m_myint * (bShouldMult ? m_myfloat : 1.0f);
}
};
コメント行で発生するエラーは次のとおりです。
Error - implicit instantiation of undefined template 'MyTemplateClass<false>'
MyTemplateClassの前方宣言に含める必要がある他の詳細は何ですか?エラーは次の行から発生していないので、メソッドが未定義であるという事実が原因ではないと思います。私が使用しているコンパイラはLLVM/CLangで、Macでコンパイルしています。