我目前正在为我的大学类(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/