次のようなファイルから A および B オブジェクトをロードしようとしています
A 3 4
B 2 4 5
B 3 5 6
A 2 3
次のクラス、Base、A、および B、Base のサブクラスがあります。それぞれ operator>> がオーバーロードされています。
問題は関数 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;
}