Win7-64 位 赛格文 g++ -std=gnu++11 (4.8.3)
在下面的片段中,必须在调用 slipInit 之后初始化变量“partition”。编译器提示(哦,太痛苦了)除非我在定义中初始化分区(在':'之后)。我刚刚开始使用 gnu++11,所以这是一个不幸的惊喜。是否有任何简单的解决方法,或者我必须创建另一种方法来进行初始化?
StringPartition::StringPartition(vector<string*>* vec, long debugFlags)
: vec(*vec)
, debugFlags(debugFlags) {
SlipCellBase::slipInit(SLIPALLOCATION, SLIPALLOCATION);
partition = * new SlipHeader();
}; // StringPartition::StringPartition()
Error Message
error: uninitialized reference member 'StringPartition::partition' [-fpermissive]
最佳答案
由于您正在尝试初始化 reference data member (从 C++11 开始,您可以在构造函数的初始化器列表中或使用大括号或等式初始化器执行此操作)但它首先需要一个函数调用,您应该更喜欢 smart pointer通过引用(前面的伪代码):
class StringPartition {
public:
StringPartition() {
SlipCellBase::slipInit(SLIPALLOCATION, SLIPALLOCATION);
partition.reset(new SlipHeader());
}
std::unique_ptr<SlipHeader> partition;
};
在 C++14 中 you could even do better :
partition = std::make_unique<SlipHeader>();
关于c++ - 如何在构造函数体中而不是在定义中初始化变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26760301/