头文件包含它:
class Shape_definition {
private:
// ...
std::vector<Instruction> items;
public:
//...
friend std::istream& operator >> (std::istream& is, Shape_definition& def); // FRIEND!
};
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& is, Shape_definition& def);
//...
定义代码:
std::istream& operator >> (std::istream& is, Bushman::shp::Shape_definition& def){
//...
Bushman::shp::Instruction instr = Bushman::shp::Instruction::get_empty();
while(is >> instr) def.items.push_back(instr); // Problem is here!
return is;
}
但我在MS Visual Studio编辑器中收到错误:
错误C2248:'Bushman :: shp :: Shape_definition :: items':无法访问 在类'Bushman :: shp :: Shape_definition'
中声明的私有成员
为什么我无法使用private
运算符中的friend
字段?
谢谢。
答案 0 :(得分:5)
经过一些侦探工作后,我假设Shape_definition
是在命名空间内定义的,你的std::istream& operator >> (std::istream& is, Shape_definition& def);
声明也是如此。
然后在命名空间外定义另一个 std::istream& operator >> (std::istream& is, Bushman::shp::Shape_definition& def)
。由于这不是您的朋友,因此访问被阻止。
尝试将其定义为:
namespace Bushman
{
namespace shp
{
std::istream& operator >> (std::istream& is, Bushman::shp::Shape_definition& def){
//...
Bushman::shp::Instruction instr = Bushman::shp::Instruction::get_empty();
while(is >> instr) def.items.push_back(instr); // Problem is here!
return is;
}
}
}