2015-07-10 144 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,它的默认构造函数会被调用。