namespace CommunicatorApi
{
class ApiObserver;
class COMM_API_EXPORT Api
{
public:
//! Basic constructor
Api(ApiObserver& observer);
//! Destructs the object and frees resources allocated by it
~Api();
}
}
我正打算致电
#include <iostream>
#include "include/communicator_api.h"
using namespace std;
int main()
{
cout << "Hello, world, from Visual C++!" << endl;
CommunicatorApi::Api::Api();
}
然而我收到了错误
CommunicatorApi::Api::Api no approprate default constructor available
答案 0 :(得分:2)
您已经使用参数定义了构造函数,因此不会生成默认构造函数。 Conditions for automatic generation of default/copy/move ctor and copy/move assignment operator?
答案 1 :(得分:2)
由于您有以下形式的自定义构造函数:
Api(ApiObserver& observer);
除非您明确定义它,否则不能使用默认构造函数。
您可以使用以下方法之一解决问题。
选项1:定义默认构造函数
class COMM_API_EXPORT Api
{
public:
//! Default constructor
Api();
//! Basic constructor
Api(ApiObserver& observer);
//! Destructs the object and frees resources allocated by it
~Api();
}
然后,您可以使用:
CommunicatorApi::Api::Api();
选项2:使用自定义构造函数
CommunicatorApi::ApiObserver observer;
CommunicatorApi::Api::Api(observer);
<强> PS 强>
CommunicatorApi::Api::Api(observer);
创建一个临时对象。您可能希望拥有一个可以在以后使用的对象。为此,您需要:
CommunicatorApi::Api apiObject(observer);