operator>>
を私のクラスプレーンに使用しようとしましたが、私はmain()
にエラーがあります。それは言うこと過負荷演算子のエラー>>
"no operator ">>" matches these operands Air.
operand types are: std::istream >> Aircraft *"
私のメイン():
int main()
{
Aircraft* air[2];
int choice;
std::cout << "Plane '1' and Helicopter '2'" << std::endl;
std::cin >> choice;
if (choice == 1)
{
Plane p;
air[0] = new Plane;
std::cin >> air[0]; //HERE IS AN ERROR
air[0]->ShowTabl();
std::cout << air[0];
}
/*if (choice == 2)
{
//air[1] = new Helicopter;
//TODO: <<and>>
}*/
system("pause");
return 0;
}
マイ読み取り():
std::istream& Aircraft::read(std::istream& frFile)
{
std::cout << "Name: ";
frFile >> Name;
std::cout << "Weight: ";
frFile >> weight;
return frFile;
}
オペレータ>>
:
それは(.H)にあります。
フレンドstd :: istream &演算子>>(std :: istream &は、航空機& A);
それは(.CPP)にあります。このように、方法で使用するためのよう
std::istream& operator >> (std::istream& is, Aircraft& A)
{
return A.read(is);
}
、完璧です:
Plane p;
air[0] = new Plane;
std::cin >> p; // it's okay
が、私はこれで間違って何をしますか?
コンパイラはポインタを与えていると言っています。オーバーロードでは参照が必要です。 – chris
あなたは '飛行機'に*ポインタ*の配列を宣言しています。あなたは本当にポインタを使用する必要がありますか? –
@ThomasMatthewsこれは相続関連の問題であると考えているので、私はそれを期待しています。配列が 'Aircraft *'の配列であることを確認しますが、 'Plane *'や(コメントを外すと) 'Helicopter *'を含むことができます。私の答えで言ったように、私は配列の必要性についてはあまり確かではありません。 –