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);并且产生了歧义!