编辑:通过const引用传递表达式exp和字符串表达式
我试图通过cout以下列方式显示一个类:
#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
这尤其令人困惑,因为当我输入ostream
时,VC ++会将std::
作为自动完成建议。造成这些错误的原因是什么,以及如何解决?
答案 0 :(得分:12)
当然,您需要在所有地点std::ostream
?即:
friend std::ostream& operator <<(std::ostream& os, Expression& exp) ...
^^^
答案 1 :(得分:2)
如果没有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;
}