c – 带有const关键字的代码将无法编译

c – 带有const关键字的代码将无法编译,第1张

概述我不明白为什么这段代码不会编译. 我在行返回源 – > GetA();中得到以下错误 cannot convert ‘this’ pointer from ‘const class FooStruct’ to ‘class FooStruct &’ 如果我删除const关键字,它编译得很好. class FooStruct{ int a;public: int GetA() {retu 我不明白为什么这段代码不会编译.

我在行返回源 – > GetA();中得到以下错误

cannot convert ‘this’ pointer from ‘const class FooStruct’ to ‘class
FooStruct &’

如果我删除const关键字,它编译得很好.

class FooStruct{  int a;public:  int GetA() {return a;};  int bar(const FooStruct *source);};int FooStruct::bar(const FooStruct *source){  return source->GetA();}

代码本身没有意义.它已从一些真正的代码中删除,其唯一目的是说明问题.

解决方法 正是因为这条线:

return source->GetA();

在这里,您尝试在您获得的指针上执行GetA函数.如果指向的对象是const,则该函数也必须是const,因为:

> const和非const函数都可以在非const对象上执行
>只能在const对象上执行const函数.

最好将所有不修改对象状态的函数标记为const,这样它们就可以用在const对象上(例如,在接受const T&作为参数的函数中).

所以在你的情况下,该类应该如下所示:

class FooStruct{public:  int GetA() const {return a;}};
总结

以上是内存溢出为你收集整理的c – 带有const关键字的代码将无法编译全部内容,希望文章能够帮你解决c – 带有const关键字的代码将无法编译所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216933.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存