错误:
'double* RealsSet::operator=(const RealsSet&)' cannot be overloaded
我的代码基本上是一个类似矢量的类。我定义了一些运算符,但是当涉及=
运算符时,我无法定义两个,第一个是赋值运算符,第二个是转换运算符。
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;
}
};
答案 0 :(得分:1)
您收到错误是因为您尝试仅通过其返回类型重载函数,这是不可能的。
如果有可能,那么编译器应该对这样的歧义做些什么呢?
weight = 50;
change(){
if(this.weight == 0){
this.weight = 10;
}
}
第二个是转换运算符
不是。如果需要转换运算符,请执行以下操作:
RealsSet my_set;
my_set = another_set; // return value discarded
更好的是,忘记转换运算符并实现一个显式转换函数,这将减少意外:
operator double*() const {
return r.real;
}
答案 1 :(得分:0)
为什么不使用conversion operator?
CREATE PROCEDURE [dbo].[Pcreate]
@name NVARCHAR(50),
@namefood NVARCHAR(50),
@restaurantname NVARCHAR(50),
@pricefood NVARCHAR(50),--Changed from Float Since It's the Column Name
@address NVARCHAR(50)
AS
BEGIN
DECLARE @Sql VARCHAR(MAX) = '
IF OBJECT_ID(''[dbo].['+@name+']'') IS NULL
BEGIN
CREATE TABLE [dbo].['+@name+']
(
[Id] INT IDENTITY(1,1) PRIMARY KEY,
['+@namefood+'] NVARCHAR(50) NOT NULL,
['+@restaurantname+'] NVARCHAR(50) NOT NULL,
['+@pricefood+'] FLOAT NOT NULL,
['+@address+'] NVARCHAR(50) NOT NULL
)
END
'
EXEC(@Sql)
END