Osttreamの<<オペレーターをオーバーロードできないのはなぜですか?
-
28-10-2019 - |
質問
編集:const Referenceによって渡された式Expと文字列式
次の方法でクラスをカウト経由で表示しようとしています。
#include <iostream>
class Expression {
private:
std::string expression;
public:
Expression(const std::string& expression):
expression(expression) { }
friend std::ostream& operator <<(ostream& os, const Expression& exp) {
return os << exp.expression; }
};
ただし、コンパイルでエラーが表示されます。
main.cpp(9) : error C2061: syntax error : identifier 'ostream'
main.cpp(9) : error C2809: 'operator <<' has no formal parameters
VC ++は私に与えているので、これは特に混乱しています ostream
私が入るときの自動完了の提案として std::
. 。これらのエラーの原因は何ですか?また、どのように解決できますか?
解決
確かにあなたは必要です std::ostream
すべての場所で?つまり:
friend std::ostream& operator <<(std::ostream& os, Expression& exp) ...
^^^
他のヒント
なしで using namespace std;
節(独自の問題がある)、あなたは完全に資格を与える必要があります 全て iostream
もの。
次のプログラムでこれを見ることができます。
#include <iostream>
class Expression {
private:
std::string expression;
public:
Expression(std::string expression):
expression(expression) { }
// added this bit.
// _/_
// / \
friend std::ostream& operator <<(std::ostream& os, Expression& exp) {
return os << exp.expression; }
};
int main (void) {
Expression e ("Hi, I'm Pax.");
std::cout << e << std::endl;
return 0;
}
印刷する:
Hi, I'm Pax.
予想通り。
そして、いくつかのコメントが指摘しているように、あなたは文字列をconst-referenceとして渡すべきです:
#include <iostream>
class Expression {
private:
std::string expression;
public:
Expression(const std::string& expression)
: expression(expression) {
}
friend std::ostream& operator <<(std::ostream& os, const Expression& exp) {
return os << exp.expression;
}
};
int main (void) {
Expression e ("Hi, I'm Pax.");
std::cout << e << std::endl;
return 0;
}
所属していません StackOverflow