报错:error: 'NetworkManager::NetworkManager()' is private within this context
时间: 2024-03-28 08:42:23 浏览: 59
这个错误是因为`std::make_shared`需要调用`NetworkManager`的构造函数来创建对象,但是构造函数是私有的,无法在类外部调用。为了解决这个错误,可以将`std::make_shared`函数声明为`NetworkManager`的友元函数,这样就可以在函数内部访问私有的构造函数了。修改后的代码如下所示:
```C++
#include <memory>
class NetworkManager {
private:
static std::shared_ptr<NetworkManager> instance;
NetworkManager() {}
public:
static std::shared_ptr<NetworkManager> getInstance() {
if (instance == nullptr) {
instance = std::make_shared<NetworkManager>();
}
return instance;
}
friend std::shared_ptr<NetworkManager> std::make_shared<NetworkManager>();
};
std::shared_ptr<NetworkManager> NetworkManager::instance = nullptr;
```
这样,`std::make_shared`就可以访问`NetworkManager`的私有构造函数,从而成功创建对象,并且无需手动管理内存。
阅读全文