C++ 对重载构造函数c++;

C++ 对重载构造函数c++;,c++,constructor,overloading,ambiguous-call,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

我有这门课

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;
};
类字段
{
公众:
字段();
~Field();
字段(常量标准::字符串和名称P,
const int idP,
常量std::map sequence=std::map(),
const std::string&constval=“”,
const std::string&presP=“”);
std::字符串f_名称;
int f_id;
std::字符串f_存在;
std::字符串f_const;
映射f_集;
};
问题是,我的类字段可以是一组其他字段,这就是我使用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;
};
类字段
{
公众:
字段();
~Field();
字段(常量标准::字符串和类型P,
常量标准::字符串和名称,
const int idP,
const std::string&presP=“”);
字段(常量标准::字符串和类型P,
常量标准::字符串和名称,
const int idP,
常量标准::字符串和常量值,
const std::string&presP=“”);
字段(常量标准::字符串和类型P,
常量标准::字符串和名称,
const int idP,
常量std::映射序列,
const std::string&presP=“”);
///字段属性
std::字符串f_类型;
std::字符串f_名称;
int f_id;
std::字符串f_存在;
std::字符串f_const;
映射f_集;
};
这可能是一个GCC错误(,);它在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() {}
#包括
#包括
类字段
{
公众:
字段();
~Field();
字段(常量标准::字符串和名称P,
const int idP,
常量std::映射序列

=(std::map()),//显示实际导致编译器错误的代码。@CodyGray-模糊性存在于其代码的早期版本中,即他尚未发布的版本中。Glolita,请将原始程序缩减为一个小而完整的示例程序。(small=20行左右,complete=我们可以将您的代码复制粘贴到一个文件中并编译它)。确保小而完整的程序仍然显示您的错误。然后将该程序复制粘贴到您的问题中。有关更多信息,请参阅。在我的主要功能中,我只执行了FASTField*ff=new FASTField(typeP,nameP,idP,presP);并且产生了歧义!