-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++ 对重载字段的歧义调用......候选人是......)所以现在我试图将所有可能性放在一个中,但编译器再次给我带来了自我最后三个字段以来的大量错误。所以任何人可以告诉我应该怎么做才能让我的三个可能的构造函数?? 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 错误57、39426);它在 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 回答