2017-02-27 3 views
0
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(); 
    } 
} 

Ich versucheAufruf Konstruktor für struct Klasse

#include <iostream> 
#include "include/communicator_api.h" 

using namespace std; 
int main() 
{ 
    cout << "Hello, world, from Visual C++!" << endl; 

    CommunicatorApi::Api::Api(); 

} 

jedoch bin recieveing ​​der Fehler, den ich anrufen

CommunicatorApi::Api::Api no approprate default constructor available 
+1

Wie der Fehler sagt, haben Sie keinen Standardkonstruktor, so dass Sie eine Instanz der Klasse nicht standardmäßig konstruieren können. –

+0

Die Fehlermeldung vom Compiler ist sehr klar. Sie haben keinen Standardkonstruktor für die Klasse "Api" und versuchen dennoch, ihn zum Konstruieren eines Objekts zu verwenden. –

+0

Eine andere Frage: Was möchten Sie tun? Kann dies sein: CommunicatorApi :: Api api(); – KonstantinL

Antwort

2

Da Sie eine benutzerdefinierte definiert Konstruktor in Form von:

 Api(ApiObserver& observer); 

Sie nicht den Standard-Konstruktor verwenden können, wenn Sie es explizit definieren.

Sie können eine der folgenden Methoden verwenden, um das Problem zu beheben.

Option 1: Definieren Sie ein Standardkonstruktor

class COMM_API_EXPORT Api 
{ 
    public: 
     //! Default constructor 
     Api(); 
     //! Basic constructor 
     Api(ApiObserver& observer); 
     //! Destructs the object and frees resources allocated by it 
     ~Api(); 
} 

dann können Sie verwenden:

CommunicatorApi::Api::Api(); 

Option 2: Verwenden Sie den benutzerdefinierten Konstruktor

CommunicatorApi::ApiObserver observer; 
CommunicatorApi::Api::Api(observer); 

PS

CommunicatorApi::Api::Api(observer); 

erzeugt ein temporäres Objekt. Sie möchten wahrscheinlich ein Objekt haben, das Sie später verwenden können. Dazu benötigen Sie:

+0

Ich vermute, das temporäre Objekt ist nicht das, was das OP sucht. – KonstantinL

+0

@KonstantinL, ich vermute, du hast Recht. –