-2

私はこのクラスを持っています

class Field
{
    public:
        Field();
        ~Field();
        Field(const std::string& nameP, 
              const int idP , 
              const std::map<int,Field*> sequence=std::map<int,Field*>(), 
              const std::string& constval="",
              const std::string& presP="");
        std::string f_name;
        int f_id;
        std::string f_presence;
        std::string f_const;
        std::map<int,Field*> f_set;
};

問題は、私の Class Field が他のフィールドのセットである可能性があるため、 map を使用したか、定数値である可能性があるため const を使用したか、どちらでもない可能性があるため、3 つの異なるコンストラクターを使用したことです。コンパイラは、「オーバーロードされたフィールドへのC ++あいまいな呼び出し...候補は...)」と言って拒否するので、すべての可能性を1つにまとめようとしましたが、コンパイラは最後の3つのフィールド以降、再び大量のエラーを出しました。 3 つの可能なコンストラクターを取得するにはどうすればよいか教えてください ?? PS: このあいまいな呼び出しについての答えを知る必要があるので、継承の提案はしないでください! ps エラーの原因となった前のコードはこれです

class Field
{
    public:
        Field();
        ~Field();
        Field(const std::string& typeP, 
              const std::string& nameP, 
              const int idP , 
              const std::string& presP="");
        Field(const std::string& typeP, 
              const std::string& nameP, 
              const int idP , 
              const std::string& constval, 
              const std::string& presP="");
        Field(const std::string& typeP, 
              const std::string& nameP, 
              const int idP , 
              const std::map<int,Field*> sequence , 
              const std::string& presP="");
    /// field attributes
        std::string f_type;
        std::string f_name;
        int f_id;
        std::string f_presence;
        std::string f_const;
        std::map<int,Field*> f_set;
};
4

1 に答える 1

0

これは GCC のバグ ( 5739426 ) である可能性があります。GCC 4.6 で動作し、4.4 では失敗します。デフォルト値を括弧で囲んでみてください:

#include <map>
#include <string>


class Field
{
    public:

        Field();
        ~Field();
        Field(const std::string& nameP,
              const int idP ,
              const std::map<int,Field*> sequence
                =   ( std::map<int,Field*>() ), //<<<---- Fix is to () the default value
              const std::string& constval="",
              const std::string& presP="");
        std::string f_name;
        int f_id;
        std::string f_presence;
        std::string f_const;
        std::map<int,Field*> f_set;
};
int main() {}
于 2012-05-11T18:11:44.877 に答える