类复制构造函数C++没有匹配函数
C++ class copy constructor has no matching function
我正在尝试编写一个类核心,它的成员变量是一个指针。复制构造函数是Core(Core& x)
而不是Core(const Core& x)
。
Core有一个成员函数Core Core::new_core (int * ptr)
,当我尝试构造Core new_core= core.new_core(ptr);
时代码有问题,请参阅下面的代码和错误信息。
#include<iostream>
class Core
{
private:
int* a;
public:
Core(int* in) {a=in;}
Core(Core& x) {a = x.data();}
inline const int * data() const {return a;}
inline int * data() {return a;}
Core new_core (int * ptr)
{
Core b(ptr);
return b;
}
};
using namespace std;
int main()
{
int ptr[3]= {1,2,3};
Core core(ptr);
Core new_core= core.new_core(ptr);
cout<< new_core.data() <<endl;
return 0;
}
错误信息:
main.cpp:在函数 'int main()' 中:
main.cpp:30:37:错误:调用"核心::核心(核心)"没有匹配函数
Core new_core= core.new_core(ptr); ^
主.cpp:30:37:注意:候选人是:
主.cpp:12:6: 注意: 核心::核心(核心&)
Core(Core& x) { a = x.data() ;} ^
main.cpp:12:6:注意:参数 1 没有从"核心"到>"核心&"的已知转换
主.cpp:10:6: 注意: 核心::核心(int*)
Core(int* in) {a=in;} ^
main.cpp:10:6:注意:参数 1 没有从"核心"到 "int*"
我可以通过更换轻松解决问题
Core(Core& x) { a = x.data() ;}
自
Core(const Core& x) { a = const_cast<int* > ( x.data() ) ;},
有没有更好的方法可以在不使用const_cast的情况下解决问题?
我想保持int* a
的私密性,并遵循以下两行:
inline const int * data() const {return a;}
inline int * data() {return a;}
谢谢。
这里的问题是new_core
返回一个临时Core
。 当您在
Core new_core= core.new_core(ptr);
编译器调用复制构造函数,但它不能绑定到该临时构造函数,因为它需要引用。 为了解决这个问题,我们可以更改复制构造函数以采用可以绑定到临时并允许您制作副本的const Core&
。
在这个例子中,为了绕过const
和使用const_cast
我们可以直接访问类成员,如下所示:
Core(const Core& x) : a(x.a) {}
相关文章:
- 使用 memcpy 函数C++复制字符数组
- 使用复制构造函数复制双精度数组
- VB.NET DLL中的C++DLL函数复制
- 使用SSE内部函数复制少量数据时出现问题
- 不可变的 lambda 函数:复制捕获的变量是否允许是 const
- C 无可行的构造函数复制类型的变量
- 没有可行的构造函数复制类型 'MyString' 的数组元素
- 编译时,复制构造函数/复制分配和正常功能调用优化之间是否存在任何区别
- 将具有默认参数的lambda函数复制到变量
- 如何最小化调用列表构造函数(复制构造函数)的次数?
- C 11矢量构造函数复制与范围
- std::函数复制运算符 (MSVC2012) 的奇怪行为
- 从函数复制成本返回STL向量
- 我定义了一个非复制构造函数;复制构造函数还会被隐式定义吗
- 可以将构造函数复制为转换运算符
- 标准::函数复制参数
- C++:strcpy 函数复制空值
- 将基类指针的构造函数复制到子类
- Zlib解压缩函数复制而不是解压缩
- C++树类:构造函数/复制/内存泄漏