2011-08-10 28 views
0

I類有一個類path聲明一個稱爲調用從另一個類C++

void addConnection(const book& book, const string& name) 

函數,其中book是一個結構。

在我的main函數中,我打電話給void generatePath(const string& inputName);,它不在任何類中。當我嘗試呼籲path類的功能,我得到這個編譯錯誤:

books.cpp:67: error: no matching function for call to ‘path::path()’ 

所以我的問題是,你怎麼罵一類的功能?我一直認爲它是:

path p; 
p.addConnection(b, "frank"); 
+1

請編輯您的問題,包括路徑類的聲明和generatePath功能。 – razlebe

回答

3

您沒有類路徑的默認構造函數。您要麼定義它或將適當的參數傳遞給構造函數path p("i don't know what kind of arguments it expects");

注意:您不要調用。你在一個類的實例上調用一個方法。

+0

對,更明確的說錯誤來自'path p;'行而不是調用'addConnection'的行。 – Motti

+0

哦,是的......這使得很多感覺謝謝! – SNpn

1

你不「調用」一個類,你構造了某個類的對象或實例。

您還沒有顯示您的代碼爲path,所以我們只能提供猜測。我的是:您已經定義了一個非默認的構造函數path,像

class path { 
public: 
    path (std::string const &str) : ... {...} 
    // note: no "path()" 
}; 

在這種情況下,編譯器將不能合成的是默認的構造函數爲您服務。另一種可能性是

class path { 
    int &r;  
}; 

即一類,其中不是所有的成員變量可以是默認構造或初始化(在這種情況下:引用必須初始化),在這種情況下,編譯器不能合成一個默認的構造。

0

如果您沒有定義任何構造函數,那麼當您從類實例化時,總是調用並實現默認的構造函數。但是如果你定義了一個構造函數,那麼默認的構造函數就是「離開」的,如果你需要的話,你可以自己編寫它。

不過你應該增加更具體的代碼,讓我們知道什麼路徑是;-)