您好我正在学习运营商重载和朋友功能。
我已宣布运营商<<在.h文件中作为我班级的朋友,但我仍然无法从.cpp文件中的函数定义访问私有成员变量
我的代码如下:
Test.h
class Test
{
private:
int size;
public:
friend ostream& operator<< (ostream &out, Test& test);
};
Test.cpp的
#include "Test.h"
#include <iostream>
using namespace std;
ostream& operator<< (ostream& out, Test& test)
{
out << test.size; //member size is inaccessible!
}
显然大小是不可访问的,虽然我已经使运营商&lt;&lt;我班上的朋友。我用谷歌搜索了一下,没有找到任何东西,所以任何人都可以帮助我吗?感谢。
注意:如果我将类定义移动到.cpp文件,每个人都可以工作,所以我认为我的问题与多个文件有关。
答案 0 :(得分:1)
在c ++中,声明的范围从上到下。因此,如果您首先包含Test.h
,那么<iostream>
之后,朋友声明就不知道类型std::ostream
。
解决方案:
Test.h:
#include <iostream>
class Test
{
private:
int size;
public:
friend std::ostream& operator<< (std::ostream &out,const Test& test);
};
Test.cpp的:
#include "Test.h"
std::ostream& operator<< (std::ostream& out,const Test& test)
{
out << test.size;
return (*out);
}
请注意,#include <iostream>
已从Test.cpp
移至Test.h
,全局operator <<
的参数需 const {{1} }。 const使运算符适用于rvalues。