调用struct类的构造函数

时间:2017-02-27 07:08:23

标签: c++ constructor

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

2 个答案:

答案 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);