Я работал с количеством одиночных классов в C++ (для класса), а теперь для проекта некласса, я пытаюсь использовать унаследованные классы.Смутно о конструкторских цепочках в C++
По какой-то причине я очень толстый о цепях конструктора.
Рассмотрим следующий пример:
class SuperClass
{
string privateKey;
string publicKey;
string name;
public:
enum Key {PUBLIC, PRIVATE};
SuperClass(Key, string);
};
SuperClass::SuperClass(Key key, string theKey)
{
switch(key)
{
case PUBLIC: publicKey = theKey;
break;
case PRIVATE: privateKey = theKey;
break;
}
}
class SubClass : private SuperClass
{
public:
SubClass(string key);
};
SubClass::SubClass(string key)
: SuperClass(SuperClass::PUBLIC, key) // "SubClass" will only interact with the public key, in this case.
{
cout << "I'm instantiated!" << endl;
}
int main()
{
SubClass example ("thisIsThePublicKey");
return 0;
}
При компиляции, я получаю следующее сообщение об ошибке:
error: no matching function ncall to SuperClass::SuperClass()
note: candidates are: SuperClass::SuperClass(SuperClass::Key, std::string)
Почему я получаю это? Разве я не использовал конструктор, который говорит, что это кандидат? Я чувствую, что прочитал каждый учебник по цепочкам конструктора, и я до сих пор не понимаю, что я должен делать по-другому.
Спасибо за помощь!
Просмотрите код в вопросе или лучше упростите действительный код и опубликуйте его напрямую. В преобразовании вы не добавили отношения наследования, и модифицированный код не должен показывать поведение, о котором вы говорите. –
-1 и проголосовали за закрытие. Приведенный здесь код не показывает проблему, указанную в вопросе, и принятый ответ не имеет отношения к реальной проблеме, что бы это ни было. –