2015-07-10 145 views
1

在我的程序中,我想從OpenCV庫中初始化一個對象作爲我自己對象的一部分。但是,每當我初始化它,我收到此錯誤:在C++中創建對象作爲私有類變量

error: expected parameter declarator

如果我不初始化它的構造函數的對象,但我需要做到這一點它的工作原理。另外,我希望稍後能夠使用這個對象的方法來修改它的新數據。下面是一個非常簡單的例子,它給了我錯誤的代碼。

class test 
{ 
    public: 
     test (int number); 

    private: 
     cv::LDA lda(2); 
} 
+0

的可能重複的[初始化類的括號使用方法](http://stackoverflow.com/questions/21215609/class-initialization-parens-to-use) – emlai

回答

3

如果使用C++ 11,那麼你可以在同一時間初始化聲明:

class test { 
    public: 
    test (int number); 
    private: 
    cv::LDA lda{2}; 
}; 

如果沒有,那麼你必須在ctor定義中使用成員初始化:

class test { 
    public: 
    test (int number) : lda(2 /*or number?*/) {…}; 
    private: 
    cv::LDA lda; 
}; 
+0

這並不能解釋爲什麼'LDA(2 )'在成員聲明中不起作用。 – emlai

+0

,因爲它是一個聲明而不是定義。 –

1

()不能用於類內成員初始化,因爲在某些情況下可以將該成員解釋爲函數聲明。

您需要爲使用{}=

cv::LDA lda = cv::LDA(2); 
// or 
cv::LDA lda{2}; 
2

它會如果你從測試的構造函數調用lda的構造函數,會更好。我認爲如果你不初始化lda,它的默認構造函數會被調用。