Спокойной ночи.Я пишу некоторые коды C ++, и я не могу скомпилировать следующий код на g ++.Это только говорит о том, что std :: string не имеет метода с именем "operator ==".Я знаю, что это не правда, но, возможно, есть некоторые ограничения или проблемы множественного наследования, о которых я пока не знаю.
Код:
#include<string>
struct Object{
constexpr Object() noexcept = default;
virtual ~Object() noexcept = default;
virtual bool operator==( const Object& other) const noexcept = 0;
};
class String : public Object, public std::string{
virtual ~String() noexcept = default;
String() noexcept = default;
virtual bool operator==( const Object& other) const noexcept{
auto ptr = dynamic_cast<const String*>(&other);
return ptr != nullptr &&
this->std::string::operator==(*ptr); // here is the error
}
};
int main(){}
Ошибка:
$ g ++ -std = c ++ 11 test.cpp -o test.run
test.cpp: в функции-члене 'virtual bool String :: operator == (const Object &) const': test.cpp:23:31: ошибка: у класса std :: __cxx11 :: basic_string нет члена с именем operator ==;Вы имели в виду «оператор =»?this-> std :: string :: operator == (* ptr);
Спасибо за внимание и оставьте комментарий, если знаете, в чем здесь проблема.