2015-10-24 53 views
2

我有構造做了一些工作,所以我調用構造函數裏面一個成員函數:當類的構造函數調用其成員函數時,會發生刪除函數錯誤的使用?

#include<iostream> 
    #include<fstream> 
    #include<string> 
    using namespace std; 

    class Token{ 
    public: 
     Token() {} 
     Token(const string &targetfile); 
     void GetToken(); 
     ifstream in; 
    }; 
    Token::Token(const string &targetfile) 
    { 
     in.open(targetfile);  
     GetToken(); 
    } 
    void Token::GetToken() 
    { 
     in.close(); 
    } 
    int main(int argc,char *argv[]) 
    { 
     Token first = Token(string(argv[1])); 
     return 0; 
    } 

我有錯誤是這樣的:

使用刪除功能「令牌::令牌(令牌& &)」 一張字條:‘令牌::標誌(標誌& &)’被隱式刪除,因爲默認定義將形成不良的

+0

這編譯與g ++:https://ideone.com/M4BAgN – jpo38

+0

我得到錯誤使用:g ++ -std = C++ 11 debug.cpp -o調試 – programforjoy

+0

你嘗試了不同的選擇嗎? ideone.com使用C++ 14 – jpo38

回答

0

使用Token first(string(argv[1]));而不是Token first = Token(string(argv[1]));

這樣,額外的移動操作符將不會被調用。

+2

'string'構造函數是隱式的,使用'Token first(argv [1]);'代替。 –

+0

@Dragos這是一個函數聲明。 – 0x499602D2

+0

@ 0x499602D2它可以在另一個上下文中,但是在這個上下文中它是一個具有顯式構造函數的變量聲明。 –

相關問題