Я "как завод" класса:Определить класс фабрики в C++
class SpecialReader {
private:
HANDLE specialFile;
SpecialReader(HANDLE specialFile);
public:
static SpecialReader Create(TCHAR* fileName);
~SpecialReader();
}
//where
SpecialReader::Create(TCHAR* fileName) {
// ...
// ...
return SpecialReader(inputFile);
}
Я хочу, чтобы определить объект в теле программы, как это:
SpecialReader myReader;
Но нет:
SpecialReader myReader = SpecialReader::Create(anyFile);
Если я попытаюсь определить объект, как в первом случае, у меня возникла ошибка компилятора:
error C2512: 'SpecialReader' : no appropriate default constructor available.
Как определить этот класс правильно?
Вы пытались дать ему соответствующий конструктор по умолчанию? Хотя, возможно, лучше не делать этого; сложнее использовать класс неправильно, если не разрешить построение по умолчанию. –
Я хочу отключить возможность создания объекта без метода Create. –
Вы уже это сделали. Но в вашем вопросе говорится иначе: в нем говорится, что вы хотите иметь возможность создавать по умолчанию. Вы не можете позволить и запретить это. –