我有一个类缓存,它的函数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)”的“this”参数传递
this参数是特定于编译器的,它有助于代码混乱和中断本地命名空间变量优先级。但这样的变量并没有在这里传递。
此外,如果类的方法返回任何成员的指针,则在返回类型示例之前,不应忘记write const:
<代码>常量浮点*getPosition()常量{…}
当您通过指向对象的指针调用方法时,此对象将作为此指针隐式传递给该方法<代码>c可能具有类型常量缓存*
。由于方法写入未声明为常量,因此它具有非常量指针,该指针可从其主体访问,需要丢弃c的常量限定符。
由于c
的类型为const Cache*
,因此您只能在其上调用const
成员函数。
您有两种选择:
(1) 从c的声明中删除const;
(2) 更改缓存::write()如下:
bool write(const MemoryAccess &memory_access, CacheLine &cl) const;
(请注意末尾添加的常量。)
我有与这里、这里或这里相同的问题,除了我为参数和函数设置了const: 但我有同样的编译错误:
错误:将“const A”作为“void A::hi()”的“this”参数传递会丢弃限定符[-fppermissive] 我不明白为什么会出现这个错误,我没有返回任何东西,只是传递了对象的引用,就是这样。 编辑 我用const correction修复了它,但是现在我试图在同一个方法中调用方法,我得到了同样的错误,但奇怪的是我没有传递这个方法的引用。 错误:将“const A”作为“void A
在gcc 5.4.0上,从const C std::map获取条目时无法编译。 这看起来类似于传递“const”。此参数丢弃限定符[-fppermissive],它是关于
下面是一个基本的代码片段,我得到了一个错误: 错误:传递'constd::map 注意:我知道我可以在不使用的情况下删除点,但上面的代码片段只是一个更大问题的示例。 我检查了一些关于类似错误的问题: 错误:传递constd::映射 但在这两种情况下,都是因为被声明为。另一方面,我试图使用/访问的
我将对象的引用传递给函数,并使用const表示它是只读方法,但如果我在该方法中调用另一个方法,即使我没有将引用作为参数传递,也会发生此错误。 错误:将'const A'传递为'valA::hello()'的'this'参数会丢弃限定符[-fpermissive] 错误:将“const A”作为“void A::world()”的“this”参数传递将丢弃限定符[-fpermissive]
以下代码在Green Hills C编译器中导致错误(错误:类型int*与参数类型const int*不兼容),而它只产生警告并使用gcc进行编译(警告:传递func的参数1会从指针目标类型中丢弃const限定符)。 哪些行为符合C标准?