模糊调用重载的构造函数c ++

时间:2012-05-11 17:39:58

标签: c++ constructor overloading ambiguous-call

我有这个班级

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;
};

问题是我的类字段可以是一组其他字段,这就是我使用地图的原因,或者它可以是一个常数值,这就是我使用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;
};

1 个答案:

答案 0 :(得分: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() {}