4

Visual Studio 2008 C ++プロジェクトがあり、構造体をヒープ割り当てし、初期化子リストを使用して初期化します。

class Foo {
public:
    explicit Foo( int a );
};

struct Bar {
    Foo foo;
    int b;
};

Bar a = Bar { Foo( 1 ), 2 };      // Works!
Bar* b = new Bar{ Foo( 1 ), 2 };  // Errors!

これを行う方法はありますか?

4

3 に答える 3

2

試す

Bar* b = new Bar({ Foo( 1 ), 2 });

Disclamer:GCCでのみテストされてい-std=c++0xます。

于 2012-03-16T14:07:18.357 に答える
2

C ++ 11はそれ、または非常に類似したものを許可します。ただし、VC 2008を使用しているため、これは役に立ちません。私が知っている唯一の解決策は、初期化を使用してローカルインスタンスを作成し、これを渡すことです。

Bar forInitialization = { Foo( 1 ), 2 };
Bar* b = new Bar( forInitialization );
于 2012-03-16T14:07:04.170 に答える
0

構造体にコンストラクターを追加してみてください。呼び出されるnewと呼び出されます。

于 2012-03-16T14:09:25.573 に答える