Kac*_*acy 0 c++ constructor compiler-errors
一旦我知道这个主题属于什么主题,我会很乐意将这个主题的标题更改为更合适的内容.
如果我更改了导致错误的构造函数的参数,则没有错误.
如果我包含那个确切的构造函数,则只会出现此错误:
error: no matching function for call to 'Object::Object(Object)'
note: candidates are: Object::Object(Object&)
note: Object::Object()
Run Code Online (Sandbox Code Playgroud)
码:
#include <iostream>
using namespace std;
class Object {
public:
Object() {} /* default constructor - no problems at all */
Object( Object & toCopy ) {} /* Cause of error, but no error when commented out */
Object func() {
Object obj;
return obj;
}
};
int main() {
Object o = o.func(); /* this is the line that the error is actually on */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你已经声明了一个不寻常和可怕的复制构造函数,即通过非常量引用获取参数的复制构造函数.这是可能的,这意味着不会隐式定义其他复制构造函数.但是,这也意味着您无法从临时值构造副本,因为它们不会绑定到非常量引用.
除非你有理由做你正在做的事情(也许你想定义auto_obj:-)?),你应该用参数声明通常的复制构造函数Object const &(但一定要正确定义它!),或者只是完全不做它依赖于隐式生成的版本(当您在代码中"注释掉"行时); 或者在C++ 11中,您可以通过声明来默认复制构造函数Object(Object const &) = default;.
(请注意,流行的Rule of Three表示你不应该定义自己的,非平凡的复制构造函数,或者如果你这样做,那么你还需要一个用户定义的析构函数和赋值运算符.确保你的代码是理智的. )
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |