41

我有一个类Cache,它的函数 write 指定为

bool write(const MemoryAccess &memory_access, CacheLine &cl);

我这样调用这个函数。

const Cache *this_cache;
c = (a==b)?my_cache:not_cache;
c->write(memory_access,cl);

上面的行给了我以下错误

“将 'const Cache' 作为 'bool Cache::write(const MemoryAccess&, CacheLine&)' 的 'this' 参数传递会丢弃限定符 [-fpermissive]。”

this 参数是特定于编译器的,它有助于代码修改和破坏局部命名空间变量的优先级。但是这里没有传递这样的变量。

4

3 回答 3

50

由于c是 type const Cache *,因此您只能const在其上调用成员函数。

你有两个选择:

(1)const从声明中删除c

(2) 改变Cache::write()如下:

 bool write(const MemoryAccess &memory_access, CacheLine &cl) const;

(注意最后添加const的。)

于 2012-05-26T11:25:24.623 回答
5

当您通过指向对象的指针调用方法时,该对象将作为this指针隐式传递给该方法。c可能有类型const Cache*。由于方法write未声明为const,因此它具有this可从其主体访问的非常量指针,需要丢弃const限定符 of 。c

于 2012-05-26T11:24:56.247 回答
0

此外,如果您的类的方法返回任何成员上的指针,您不应该忘记在返回类型示例之前编写 const:

const float * getPosition() const{...}

于 2015-10-29T05:45:44.707 回答