【发布时间】:2021-09-19 21:27:13
【问题描述】:
我正在处理提取和插入重载。而且我在使用朋友时无法访问私有变量。
这是我基于标准教程的代码以及我的老师让我使用的代码
Main.cpp
#include <iostream>
#include "Obj.h"
using namespace std;
using namespace N;
Obj a;
int main() {
cout << a;
}
Obj.cpp
#include "Obj.h"
#include <iostream>
using namespace std;
using namespace N;
ostream &operator<<(ostream &output, const Obj &a) {
output << a.h;
return output;
}
对象.h
#ifndef OBJ_H
#define OBJ_H
#include <iostream>
using namespace std;
namespace N {
class Obj {
private:
string h;
public:
//constructors
Obj() {
h = "default";
}
//overloads
friend ostream &operator<<(ostream &output, const Obj &a);
};
}
#endif
我从头文件设置开始,并在得到相同的错误代码时将其分解为这个。特别是我一直得到这个结果。
Obj.cpp:9:15: error: 'h' is a private member of 'N::Obj'
output << a.h;
^
./Obj.h:12:14: note: declared private here
string h;
【问题讨论】:
-
欢迎来到 Stack Overflow!您能否编辑您的问题以显示您正在使用的
.h和.cpp文件的确切内容?您上面显示的代码应该可以正常工作,这让我认为可能发生了其他事情。 -
我的水晶球(例如它)表明您的重载(朋友)
<<运算符的声明和定义之间存在非常小的差异。可能是缺少const或&? -
我可以做的更好,向你展示这个项目。 replit.com/@QuietQuiet/Insertion-Operator#main.cpp我也会编辑问题
标签: c++ operator-overloading extract friend