0

我有两个非常相关的问题;首先,在同一个类中调用重载的构造函数,其次,使用 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");

有不同的文件格式,因此很难将它们作为构造函数。

4

3 回答 3

1

第一个问题 - 如果objectA.get_distribution是一个方法,你应该有一个方法调用::FooB(objectA.get_distribution())

于 2013-03-13T15:29:13.240 回答
0

这里:

    class FooA: FooB
    {
      FooA();
      FooA(myDataType distribution):FooB(distribution)

       void load_from_file(string file_name){
       }
    };

函数 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;
};
于 2013-03-13T15:44:31.697 回答
0

对于您的第一个问题,在 c++11 之前没有构造函数委托,而您使用的语法对于 c++11 是正确的。只需确保您已启用 c++11 编译,它应该可以正常工作。如果你不能使用 C++11,你将不得不复制一些代码。

我不明白您的第二个问题是否/什么(关于重新加载)。

于 2013-03-13T16:29:01.303 回答