C++私有构造函数(带参数)不允许实例化

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)

关键是如果构造函数中没有任何参数,我就不会收到此错误.我可以知道为什么我会得到这个以及如何解决它?非常感谢

Die*_*ühl 6

在课堂上,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)

是一个函数声明.如果你不使用括号,你应该得到关于默认构造函数不存在的错误,或者,如果你实际声明它,则不能访问.