У меня есть базовый класс и производные классы. Полученный вектор содержит вектор объектов, а output_two содержит вектор строк. Я подталкиваю объекты к вектору deriver_one и строкам к выведенному вектору.Атрибут класса аргументов
class Base{
public:
virtual void Greetings(){ cout << " I am base class " << endl;}
virtual string getName(){ return "base";}
virtual vector<string>* getStr() { return NULL; }
virtual bool operator == (Base *);
};
class Derived_one : public Base{
public:
virtual void Greetings(){ cout << " I am derived one " << endl;}
virtual string getName(){ return "one";}
virtual bool operator == (Base *);
private:
vector<Base*> m;
};
class Derived_two : public Base{
public:
virtual void Greetings(){ cout << " I am derived two " << endl;}
virtual string getName(){ return "two";}
virtual vector<string>* getStr() { return &str; }
private:
vector<string> str;
};
Однако я хотел бы сравнить два экземпляра производных классов, я определен
bool Derived_one:: operator ==(Base *a){
for(size_t i = 0; i < m.size(); i++){
if(m[i] -> getStr()){
for(unsigned int j = 0; j < m[i] -> getStr() ->size(); j++){
if((*(m[i] -> getStr()))[j] != a -> (*(m[i] -> getStr()))[j]){
return false;
}
}
}
}
}
error: expected unqualified-id before '(' token|
в reffers ошибки в линии
if((*(m[i] -> getStr()))[j] != a -> (*(m[i] -> getStr()))[j]
Почему компилятор жалуется здесь? Возвращаемый указатель getStr()
, который будет разыменован *. Аргумент a здесь является типом указателя. Здесь есть корень проблемы? Я не могу найти ответа на этот вопрос. Спасибо
Какая линия делает ошибки см? – Quentin
if ((* (m [i] -> getStr())) [j]! = A -> (* (m [i] -> getStr())) [j] – Darlyn
'a -> (* (m [i] -> getStr())) [j] 'действительно синтаксически недействителен: справа от' -> 'должно быть имя члена' * a'. Что вы пытаетесь выразить? – Quentin