0

<< 関数で vx、vy、vz を実行しようとしているように、フレンド関数はクラス変数にアクセスできると考えました。しかし、それはコンパイルされません。それらの行で識別子を解決できないと言っています。

また、名前空間の使用方法を学ぼうとしています。実装ファイルで名前空間 vec を使用していますが、すべての前に Vector:: を含める必要があります。

ヘッダー ファイル:

#ifndef VECTOR_H
#define VECTOR_H

namespace vec {

    class Vector {
    private:
        double x, y, z;

    public:
        Vector(double, double, double);
        friend std::ostream& operator<<(std::ostream&,  const Vector&);

    };

}

#endif  /* VECTOR_H */

.cpp ファイル:

#include "Vector.h"
#include <iostream> 
using namespace vec;

//Constructor
Vector::Vector(double x1 = 0, double y1 = 0, double z1 = 0) {
    x = x1;
    y = y1;
    z = z1;
}

//Operators
std::ostream& operator<<(std::ostream& out, const Vector& v) {
    out<<"<"<<v.x<<", "<<v.y<<", "<<v.z<<">";
    return out;
}
4

2 に答える 2

4

フレンド関数はメンバー関数ではなくoperator<<、 の左辺を持つためにメンバーである必要はありませんostream。無料の関数に変更します。

std::ostream& operator<<(std::ostream& out, Vector v) {
              ^^ no qualification

また、値ではなく const 参照によってベクトルを取得します。

于 2013-02-12T00:02:45.823 に答える
1

フレンド関数は名前空間vecに属しているため、そのように定義する必要があります。

次のように変更します。

std::ostream &vec::operator << (std::ostream &out , const Vector &v) { //etc
于 2013-02-12T00:16:13.590 に答える