クラステンプレートの一部のメンバー関数で関数オブジェクトを使用するクラステンプレートを使用する際に問題があります。エラーメッセージは、VS2010のコンパイラを形成している。テンプレートを使用しているときにデフォルトのコンストラクタがありません
エラーC2512: 'SimpleFunctor :: SimpleFunctor':次のようにありません適切なデフォルト コンストラクタが利用可能
はこれを再現するために小型化コードは次のとおりです。
// myfunctor.h
class SimpleFunctor
{
private:
SimpleFunctor(const SimpleFunctor&);
SimpleFunctor& operator=(const SimpleFunctor&);
public:
bool operator()() { return true; }
};
// mytemplate.h
#include "myfunctor.h"
template< typename T >
class Test
{
private:
Test(const Test&);
Test& operator=(const Test&);
public:
Test(){}
void testFunction(T parameter)
{
bool result = SimpleFunctor()();
}
};
// main.cppに
#include "HK_Template.h"
int main()
{
Test<int> obj;
obj.testFunction(5);
return 0;
}
この例では、次のようにクラスSimpleFunctorにデフォルトコンストラクタを追加するので、正しいと思わ上記のエラーメッセージが表示されます。
SimpleFunctor() {}
はエラーを修正します。
なぜ、コンパイラはデフォルトのコンストラクタを生成しないのですか?
+1非常によく提示された質問 –