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

时间:2018-01-16 16:19:13

标签: c++

错误:

'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;
    }
};

2 个答案:

答案 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