rah*_*man 1 c++ constructor private friend
我的私有构造函数中有一个问题,如下所示:
Lane.hpp:
namespace sim_mob
{
class B
{
friend class A;
private:
B(int){}
};
}
Run Code Online (Sandbox Code Playgroud)
xmll.hpp:
#include"Lane.hpp"
namespace geo
{
class A
{
public:
A()
{
sim_mob::B b(2);
}
};
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
#include"xmll.hpp"
int main()
{
geo::A a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
命令:$ g ++ main.cpp
In file included from main.cpp:2:0:
Lane.hpp: In constructor ‘geo::A::A()’:
Lane.hpp:10:5: error: ‘sim_mob::B::B(int)’ is private
xmll.hpp:9:23: error: within this context
Run Code Online (Sandbox Code Playgroud)
关键是如果构造函数中没有任何参数,我就不会收到此错误.我可以知道为什么我会得到这个以及如何解决它?非常感谢
在课堂上,sim_mob::B你会成为一个班级的朋友,sim_mob:A但你希望这种友谊延伸到geo::A它,显然,它不会.要解决这个问题,你需要geo::A在成为朋友之前做出声明:
namespace geo { class A; }
namespace sim_mob
{
class B
{
friend class geo::A;
private:
B(int){}
};
}
Run Code Online (Sandbox Code Playgroud)
我猜,它与默认构造函数"一起工作"的事实是,您宁愿声明一个函数而不是实例化一个对象:
sim_mob::B b();
Run Code Online (Sandbox Code Playgroud)
是一个函数声明.如果你不使用括号,你应该得到关于默认构造函数不存在的错误,或者,如果你实际声明它,则不能访问.
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |