C++ 赋值运算符不起作用

C++ 赋值运算符不起作用,c++,constructor,overloading,operator-keyword,C++,Constructor,Overloading,Operator Keyword,我有一个构造函数来表示大数字并将它们存储到向量中: 我的类由一个向量、一个布尔值和一个整数组成,应该表示大的数字 CBigInt(const char* str2) { string str=string(str2); num.resize(200000); if (str[0]=='-') { signe=true; pos=str.length()-1; for (int i=pos;i>0;i

我有一个构造函数来表示大数字并将它们存储到向量中: 我的类由一个向量、一个布尔值和一个整数组成,应该表示大的数字

    CBigInt(const char* str2)
{
    string str=string(str2);
    num.resize(200000);
    if (str[0]=='-') 
    {
        signe=true; 
        pos=str.length()-1;
        for (int i=pos;i>0;i--)
        {
            num[pos-i]=str[i]-48;
        }
    }
    else
    {
        signe=false; 
        pos=str.length();
        for (int i=pos;i>=0;i--)
        {
            num[pos-i-1]=str[i]-48;
        }
    }       
}

我得到一个错误:

一个转换序列最多只能包含一个隐式的用户定义转换。您的包含两个:
const char[]
string
,然后
string
cborigint

一个简单的解决方法是使一个转换显式:

CBigInt autre("123456789012345678901111");

转换序列最多只能包含一个隐式用户定义转换。您的包含两个:
const char[]
string
,然后
string
cborigint

一个简单的解决方法是使一个转换显式:

CBigInt autre("123456789012345678901111");

在现有构造函数的基础上声明并实现一个附加构造函数:

CBigInt::CBigInt(const char* str):CBigInt(string(str)){}

在现有构造函数的基础上声明并实现一个附加构造函数:

CBigInt::CBigInt(const char* str):CBigInt(string(str)){}

很可能它们不起作用,因为编译没有在同一个操作中提供两个隐式转换,一个从
Const Char*
String
,另一个从
String
cborigint
。并且只有当类型为
cborigint
时,才可能调用
operator=

这可以在与类一起正确编译的代码中重新编写:

   CBigInt a("99") //justo one implicit convertion, to const char * to string
   string std;
   a = std; //just one implicit convertion, to String to CBigInt
   a = string("99"); //just one implicit convertion, to String to CBigInt
我的建议是将您的代码从
CBigInt(string)
复制到
CBigInt(const char*)
,并在字符串末尾搜索“\0”


我给你的另一个建议是将签名从
CBigInt(string)
交换到
CBigInt(const string&)
,速度更快,因为不复制字符串,也不需要更改代码。

很可能它们不起作用,因为编译在同一操作中不提供两个隐式转换,一个从
Const Char*
String
,一个从
String
cborigint
。并且只有当类型为
cborigint
时,才可能调用
operator=

这可以在与类一起正确编译的代码中重新编写:

   CBigInt a("99") //justo one implicit convertion, to const char * to string
   string std;
   a = std; //just one implicit convertion, to String to CBigInt
   a = string("99"); //just one implicit convertion, to String to CBigInt
我的建议是将您的代码从
CBigInt(string)
复制到
CBigInt(const char*)
,并在字符串末尾搜索“\0”


我给你的另一个建议是将你的签名从
CBigInt(string)
交换到
CBigInt(const string&)
,速度更快,因为它不复制字符串,也不需要更改代码。

字符串是
std::string
?是的字符串是std::string。你可以这样做
CBigInt foo=std::string(“11113”)
但是我仍然想知道为什么它不能从
const char[]隐式构造字符串
顺便说一句,如果你支持c++11,你可能需要定义一个
用户定义的文本。这远没有那么令人困惑<代码>'0'
。字符串是
std::string
?是的字符串是std::string。你可以这样做
cborigint foo=std::string(“11113”)
,但我仍然想知道为什么它不能从
const char[]隐式构造字符串,如果您有c++11支持,您可能需要定义一个
用户定义的文本
。提示:避免使用幻数,而是使用字符文本。这远没有那么令人困惑<代码>'0'
。但这不会使两个构造函数混淆吗?@stepanBY:1。你应该更新你的问题,而不是改变它,因为现在没有以前给出的答案似乎相关。2.对于当前的问题,您需要提供实际导致运行时错误的代码(而不仅仅是
CBigInt
类)。但这不会混淆两个构造函数吗?@stepanBY:1。你应该更新你的问题,而不是改变它,因为现在没有以前给出的答案似乎相关。2.对于当前的问题,您需要提供实际导致运行时错误的代码(而不仅仅是
cborigint
类)。或者直接使用const char*可能更好?或者直接使用const char*可能更好?但在这之后,我是否必须调整所有重载的运算符?通过用const*char替换const string?但是在那之后,我是否需要调整所有重载的运算符?用常量*字符替换常量字符串?