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

Friend 函数不是成员函数,并且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 回答