2014-09-26 39 views
0

在我的.h我有C++运算符Surchage类声明

const CResultats & operator = (const CResultats & desResultats); 

当我写这篇文章:

CResultats CResultats :: operator = (const CResultats & desResultats) const 
{ 
} 

为什么不工作? 我是新来的C++ ...如果对不起这是愚蠢的。

+2

阅读:[?意义的“常量”最后的C++方法声明】(HTTP: //sackoverflow.com/questions/751681/meaning-of-const-last-in-ac-method-declaration) – Csq 2014-09-26 13:39:34

回答

1

声明运营商为

CResultats & operator = (const CResultats & desResultats); 

,并把它定义为

CResultats & CResultats :: operator = (const CResultats & desResultats) 
{ 
} 

你可以声明(和定义)的operastor作为

const CResultats & operator = (const CResultats & desResultats); 

但是语义上是无效的声明。

+0

我很遗憾不允许改变运营商的代码.. – Sadboy 2014-09-26 13:42:54

+0

@Sadboy在这种情况下改变将操作符的类型返回给'const CResultats&'。 Vlad的版本根据赋值运算符的惯例(即您的定义非常规)。 – BeyelerStudios 2014-09-26 13:46:17

+0

@BeyelerStudios和'const'赋值运算符的服务目的是什么?这不是约定,而是有意义的。 – 2014-09-26 13:47:19

0

当你写的“本”,这不是“有效的”,因为它不符合签名;编译器不同

具有const的成员操作符(函数)最后在const对象上操作,就像那样简单。但是,在这种情况下,它没有任何意义,因为此运算符的唯一合理操作是修改对象

1

此:

const CResultats & operator = (const CResultats & desResultats); 

是通过常量引用采取CResultats的函数的声明,和由常量引用返回CRFesultats。该方法本身不是const

但这:

CResultats CResultats :: operator = (const CResultats & desResultats) const 

是一个const功能,以const引用需要CResultats一个函数的定义,并返回一个CResultats的价值。

这些都是在两个方面两个不同的东西:

  1. 您声明以const引用返回功能,但你把它定义它的返回值。
  2. 您声明该函数为非const,但您将其定义为const。

如果要定义相匹配的声明,那么你必须更改定义:

const CResultats & CResultats::operator = (const CResultats & desResultats) 
{ 
    // ... 
}