gpt4 book ai didi

c++ - 错误:double* RealsSet::operator=(const RealsSet&)' 无法重载

转载 作者:行者123 更新时间:2023-11-30 05:05:33 25 4
gpt4 key购买 nike

错误:

'double* RealsSet::operator=(const RealsSet&)' cannot be overloaded

我的代码基本上是一个类似 vector 的类。我定义了一些运算符,但是涉及到=运算符,我不能定义两个,第一个是赋值运算符,第二个是转换运算符。

class RealsSet{

private :
int rsize, maxsize;
double* real;
public :
RealsSet() : maxsize(5) , rsize(0) , real(new double[maxsize]) {
}
RealsSet(vector <double>& v): maxsize(v.size()+5-(v.size()%5)) , rsize(v.size()) , real(new double[maxsize]) {
for(int i=0;i<rsize;i++){
real[i]=v[i];
}
}
...
RealsSet& operator=(const RealsSet& r){
if(this != &r){
delete[] real;
rsize=r.rsize;
maxsize=r.maxsize;
real = new double[maxsize];
for(int i=0;i<rsize;i++){
real[i]=r.real[i];
}
}
return *this;
}
double* operator=(const RealsSet& r){
return r.real;
}
};

最佳答案

你得到错误是因为你试图仅通过函数的返回类型来重载函数,这是不可能的。

如果可能,那么编译器应该如何处理这样的歧义?

RealsSet my_set;
my_set = another_set; // return value discarded

the second one is a conversion operator

事实并非如此。如果需要转换运算符,请执行以下操作:

operator double*() const {
return r.real;
}

更好的是,忘掉转换运算符并实现一个显式转换函数,这样会产生更少的意外:

double* get_real() const {
return real;
}

关于c++ - 错误:double* RealsSet::operator=(const RealsSet&)' 无法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com