【发布时间】:2017-11-28 18:56:51
【问题描述】:
我有一个头文件和一个 cpp 文件...在 .h 文件中,我声明了一个 ZZZ 类并添加了一些私有参数并声明了一个 friend 函数,但是当我尝试访问.cpp 文件出现错误:
error: within this context
output << zzz.ZZZ_name << "." ;
而且我在 heder 文件中也得到了这个带有私有参数的错误:
error: 'std::string X::Y::ZZZ::ZZZ_name' is private
string ZZZ_name;
ZZZ.h
#include <iostream>
#include <string>
using std::string;
namespace X {
namespace Y {
class ZZZ {
private:
string ZZZ_name;
public:
friend std::ostream &operator<<(std::ostream &output, const ZZZ &zzz);
};
std::ostream &operator<<(std::ostream &output, const ZZZ &zzz);
}}
ZZZ.cpp
#include "ZZZ.h"
#include <stdbool.h>
using namespace X::Y;
using std::cout;
std::ostream& operator<<(std::ostream& output, const ZZZ& zzz){
output << zzz.ZZZ_name << "." ;
return output;
}
【问题讨论】:
-
标头引用命名空间
X和Y。.cpp文件莫名其妙地引用了名为x和y的完全不同的命名空间。这显然不是真正的代码,而是幻想代码(更不用说头文件中明显的语法错误,函数声明中缺少右括号)。如果您想获得有关真实代码问题的有用答案,您需要以minimal reproducible example 的形式展示真实代码,而不是用虚假代码浪费大家的时间。失败。 -
我不会浪费你的时间吗,因为我没有问你 :) 我的代码也很大,我想问一下这个具体的事情......我知道如果没有人会帮助我我插入了一个 1000+ 代码.. 这个想法很清楚:如何声明一个朋友函数一个 cpp
-
@kasandra 你编译了这个示例代码吗? Godbolt 在抱怨操作符之前指出了缺少的括号和不正确的命名空间。
-
我想确保我明白你在说什么。正如这篇帮助中心文章所解释的那样,而不是提供带有真实代码的minimal reproducible example;您希望有人阅读与任何事情无关的虚构代码,除了真正的问题之外还有明显的拼写错误,无论它是什么,并为您解决?这里还有很多其他问题,提问者花时间将他们的大代码修剪到演示问题所需的最低限度,并且有人给出了答案。如果你不关心提出一个好的问题,那么就不太可能得到一个好的答案。
-
@kasandra “有人已经帮助了我” 这并没有让你的问题变得更好。
标签: c++ namespaces friend