2016-04-06 11 views
0

以下是一个制作的示例,但是代表我正在处理的代码示例。如何在这个类中调用构造函数。

我们如何在这里调用类test的构造函数?

class Test 
{ 
public: 
    Test(vector<double>* pt) 
    { 
    ptv = pt; 
    } 
    vector<double>* ptv; 

}; 



class container 
{ 

public: 
    container(double a, double b) 
    { 
    v.push_back(a); 
    v.push_back(b); 
    // How to call the construtor of ct_ptv here? 
    } 
    vector<double> v; 
    Test  ct_ptv; 
}; 

换言之,我有两个类。其中一个被称为容器,其实例化 包含大小为2的向量。相同的 类也将具有名为Test的类,其将包含指向矢量v的指针 。

如何在这里调用ct_ptv的构造函数?

+2

_' //如何在这里呼吁ct_ptv的construtor? '_你不能(不能)在构造函数体中调用它,但需要在成员初始值设定项列表中初始化它。 –

回答

1
class container 
{ 
public: 
    container(double a, double b) : 
     v({ a, b }), 
     ct_ptv(&v) 
    { 
    } 
    vector<double> v; 
    Test ct_ptv; 
}; 
+0

有时,当您从初始化程序列表中引用成员时,您会收到警告。当我将一些指针传递给基类时,我有这个。检查两次,然后再忽略警告。 – BitTickler

+0

请注意,'v({a,b})'语法仅在C++ 11及更高版本中可用。在C++ 11之前,你必须坚持在构造函数体中调用'v.push_back()'。不过,您仍然可以在构造函数的初始化列表中初始化'ct_ptv'。 –

+0

@BitTickler你所指的警告可能是在初始化之前使用成员变量。如果在此示例中(在类定义中,不在初始化程序列表中)切换了'v'和'ct_ptv',则会显示该警告。数据成员总是按照它们在类定义中出现的顺序进行初始化。 – Kevin

0
class container 
{ 
public: 
    container(double a, double b) 
     : ct_ptv(&v) 
    { 
    v.push_back(a); 
    v.push_back(b); 
    } 
    vector<double> v; 
    Test  ct_ptv; 
}; 
相关问题