我有两个非常相关的问题;首先,在同一个类中调用重载的构造函数,然后使用load_from_file()函数重新初始化调用对象。这是一个例子:
class FooA: FooB
{
FooA();
FooA(myDataType distribution):FooB(distribution)
FooA(myClasstype objectA):FooA(objectA.get_distribution){} // suppose objectA has a method get_distribution().
..
...
}
它出错了:
非法成员初始化
第二个问题:
class FooA: FooB
{
FooA();
FooA(myDataType distribution):FooB(distribution)
void load_from_file(string file_name){
// i have another library function to load from file
JointDistribution jd = load_from_file(file_name);
// now i want to re-configure the current object
*this = FooA(jd);
}
FooA * fa = new FooA();
fa.load_from_file(" FILE_NAME&#34);
有不同的文件格式,因此很难将它们作为构造函数。
答案 0 :(得分:1)
第一个问题 - 如果objectA.get_distribution
是方法,则应该在那里调用方法::FooB(objectA.get_distribution())
答案 1 :(得分:0)
这里:
class FooA: FooB
{
FooA();
FooA(myDataType distribution):FooB(distribution)
void load_from_file(string file_name){
}
};
function load_from_file是私有的,所以你不能像你写的那样调用它:
FooA* fa = new FooA();
fa.load_from_file("file_name");
构造函数也是私有的...(虽然有时我们希望它们是私有的,但我假设它不是xD的情况]
你可以从构造函数调用构造函数:
class CComplex{
public:
CComplex(int real1,int image1)
{
real=real1;
image=image1;
const char& x='x';
CComplex(1,2,3);
}
CComplex():real(0),image(0){}
CComplex(const CComplex &c)
{
real=c.real;
image=c.image;
}
CComplex(int i1, int i2, int i3){cout<<"\n123!";}
public:
int real,image;
};
答案 2 :(得分:0)
对于你的第一个问题,在c ++ 11之前没有构造函数委托,而你使用的语法对于c ++ 11是正确的。只要确保你已经启用了c ++ 11编译,它应该可以正常工作。如果你不能使用C ++ 11,你将不得不复制一些代码。
我无法理解你的第二个问题是什么/关于重新加载的问题。