2

重複の可能性:
最も厄介な解析: A が a(()); でない理由 仕事?

file1.h には 2 つのクラスがあります。

class ZoneRecord {
public:
    //a lof of stuff here
};

class RegisterRecord {
public:
RegisterRecord(ZoneRecord rec); //this function register object rec in a fabric
};

そして file2.cpp は次のとおりです。

#include "file1.h"
class MockZoneRecord: public ZoneRecord {
public:
MockZoneRecord(): ZoneRecord() {}
};

RegisterRecord mockrecord_register(MockZoneRecord());

このコードは、1 つの点を除いて完全にコンパイルされます。mockrecord_register は関数の宣言であると言っています。しかし、実際には、mockrecord_register という名前の RegisterRecord 型のグローバル オブジェクトを作成したかったのです。これが関数プロトタイプではなくオブジェクトであることをコンパイラに明示的に伝える方法は?

4

2 に答える 2

4

あなたは最も厄介な解析を経験しています。

これを解決する1つの方法は、次のようにコピーを使用することです。

RegisterRecord mockrecord_register = RegisterRecord(MockZoneRecord());

もう1つは、yurikilochekによる回答のように括弧を使用することです。

コンパイラがC++11互換の場合は、次の構成を使用できます。

RegisterRecord mockrecord_register{MockZoneRecord()};
于 2012-08-01T09:41:04.923 に答える
1

引数を括弧で囲みます:

RegisterRecord mockrecord_register((MockZoneRecord()));
于 2012-08-01T09:40:15.200 に答える