У нас проблема с использованием шаблона класса, который сам использует функциональные объекты в некоторых своих функциях-членах.Сообщение об ошибке из компилятора 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() {}
исправляетошибка.
Итак, вопрос в том, почему компилятор не генерирует конструктор по умолчанию?