我在C++中有一個奇怪的問題。也許我只是在做錯事,但我無法弄清楚,什麼。如果這很重要,我正在使用微軟VS2013。C++ VS2013:覆蓋默認構造函數不起作用
我創建了一個新的類有兩個構造函數:
class CtVolume{
public:
CtVolume();
CtVolume(std::string path);
...
第一個應該覆蓋默認構造函數。這是不符合我預期的工作。如果我這樣做:
CtVolume myVolume();
那麼我認爲這應該調用默認構造函數,我定義並執行我爲其實現的代碼。但事實並非如此。我的構造函數中的代碼沒有執行。更令人費解的是,我不能像之後的物體一樣使用myVolume
。如果我試圖調用類中實現的方法之一:
myVolume.reconstructVolume();
編譯器不讓我編譯我的代碼。它說:
錯誤5錯誤C2228:左「.reconstructVolume」必須有類/結構/聯合
所以當它看來,這種方式我不能創建一個對象。
現在,如果我用關鍵字'new'創建對象,我的構造函數代碼正在執行,一切都按預期工作。例如:
CtVolume* myVolume = new CtVolume();
myVolume->reconstructVolume();
這工作正常。
現在,另一件事:如果我用我定義的其他構造函數,創建對象的工作同樣出色,這意味着這個例子中的兩種方式:
CtVolume myVolume("sourcefiles/data/skullPhantom");
myVolume.reconstructVolume();
編譯和按預期工作。
現在我試圖找出哪種類型的myVolume
是在不同的情況下,通過調用typeid(myVolume).name()
。在我描述的情況下,它返回的類型爲class CtVolume __cdecl(void)
,它在「不起作用」的情況下和class CtVolume
在我使用其他構造函數的「工作」情況下。
現在任何人都可以告訴我,__cdecl(void)
的含義和我做錯了什麼? 讓我感到困惑的是,我認爲我之前做了很多次,直到現在它一直對我有用。
謝謝!
非常感謝,現在正常工作! – user1488118