我目前正在为我的大学类(class)分配一个大的整数库。
我遇到以下代码的问题:

MyInteger::MyInteger(){ //default
    //some code
}
MyInteger::MyInteger(char *s){ //construct from string
    //some code
}
MyInteger::MyInteger(MyInteger &otherInt){ //copy constructor
    //some code
}
MyInteger MyInteger::parse(char *s){ //parse string and create new object
    return MyInteger(s);
}

我收到有关解析函数的以下错误:
MyInteger.cpp: In static member function ‘static MyInteger MyInteger::parse(char*)’:
MyInteger.cpp:34:20: error: no matching function for call to ‘MyInteger::MyInteger(MyInteger)’
  return MyInteger(s);
                    ^
MyInteger.cpp:34:20: note: candidates are:
MyInteger.cpp:23:1: note: MyInteger::MyInteger(MyInteger&)
 MyInteger::MyInteger(MyInteger &otherInt){ //copy constructor
 ^
MyInteger.cpp:23:1: note:   no known conversion for argument 1 from ‘MyInteger’ to ‘MyInteger&’
MyInteger.cpp:10:1: note: MyInteger::MyInteger(char*)
 MyInteger::MyInteger(char *s){ //construct from string
 ^
MyInteger.cpp:10:1: note:   no known conversion for argument 1 from ‘MyInteger’ to ‘char*’
MyInteger.cpp:4:1: note: MyInteger::MyInteger()
 MyInteger::MyInteger(){ //set string to 0
 ^
MyInteger.cpp:4:1: note:   candidate expects 0 arguments, 1 provided

它不应该使用第二个构造函数吗?
要么将字符串与MyInteger混淆,要么将字符串以某种方式转换为MyInteger,然后编译器尝试使用列出的3个候选对象再次将其转换。重载的+运算符也会发生类似的错误。

请告诉我我做错了。

最佳答案

问题不是MyInteger(s)。它构造该临时对象。试图返回这个临时对象就是问题所在。您将按值返回,这意味着需要创建一个副本,但是您的副本构造函数采用MyInteger&,它无法绑定(bind)到临时对象(rvalues)。您的副本构造函数应该使用const MyInteger&类型的参数,这将允许它这样做。

关于c++ - 为什么g++似乎混淆了数据类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28113943/

10-13 02:14