Я пытаюсь загрузить объекты А и В из файла, который будет выглядеть какЗагрузка различных объектов из файла
A 3 4
B 2 4 5
B 3 5 6
A 2 3
У меня есть следующие классы, базы, А и В, подклассов базы. Каждый с оператором >> перегружен.
Проблема в функции load(). Я не уверен, как создавать объекты .. Мой load() не компилируется, потому что ‘pO’ was not declared in this scope
. Как я могу это исправить? Или что было бы лучшим способом добиться этого?
Кроме того, если мне удастся заставить его работать как-нибудь, мне нужно будет удалить объекты вручную?
class Base
{
public:
Base() {}
Base(int tot_) : tot(tot_) {}
void print() const {
std::cout << "Tot : " << tot << std::endl;
}
private:
int tot;
};
class A : public Base
{
public:
A() : Base(0) {}
A(int a1, int a2) : Base(a1+a2) {}
};
class B : public Base
{
public:
B() : Base(1) {}
B(int b1, int b2, int b3) : Base(b1+b2+b3){}
};
std::istream& operator>>(std::istream& in, A& a)
{
int a1, a2;
in >> a1;
in >> a2;
a = A(a1,a2);
return in;
}
std::istream& operator>>(std::istream& in, B& b)
{
int b1, b2, b3;
in >> b1;
in >> b2;
in >> b3;
b = B(b1,b2,b3);
return in;
}
bool load(const std::string& s, std::vector<Base*>& objs)
{
std::ifstream is(s.c_str());
if (is.good())
{
std::string obj;
while (!is.eof())
{
is >> obj;
if (obj == "A") {
A *pO = new A;
}
else (obj == "B") {
B *pO = new B;
}
is >> *pO;
objs.push_back(pO);
}
is.close();
return true;
}
return false;
}
Я предполагаю, что вы имели в виду Base * pO – sara
Да, я пропустил декларации и подумал, что B является подклассом A. – Joni
Это сделало это, спасибо. Вы знаете, нужно ли мне удалять эти объекты вручную или они умирают, когда векторные объекты умирают? – user2287453