0

非常に関連した 2 つの問題があります。最初に、同じクラス内でオーバーロードされたコンストラクターを呼び出し、次に 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(). 
..
...

} 

エラーが発生します:

不正なメンバーの初期化

2番目の問題:

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 = 新しい FooA();

fa.load_from_file("ファイル名");

さまざまなファイル形式があるため、それらをコンストラクターとして配置するのは困難です。

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 を使用できない場合は、いくつかのコードを複製する必要があります。

あなたの2番目の質問が何であるか理解できません(リロードに関して)。

于 2013-03-13T16:29:01.303 に答える