0

編集: 式 exp と文字列式を const 参照で渡しました

次の方法でクラスを 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::。これらのエラーの原因と解決方法を教えてください。

4

2 に答える 2

13

確かにあなたstd::ostreamはすべての場所で必要ですか?すなわち:

friend std::ostream& operator <<(std::ostream& os, Expression& exp) ...
                                 ^^^
于 2011-06-17T01:19:06.640 に答える
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;
}
于 2011-06-17T01:34:56.133 に答える