【问题标题】:Why does Eclipse-CDT say self-assignment is an error?为什么 Eclipse-CDT 说自赋值是一个错误?
【发布时间】:2014-05-20 19:26:42
【问题描述】:

我正在使用 google 测试在 eclipse g++ 中进行单元测试。当我尝试在我设计的课程中对自分配检查进行单元测试时遇到错误。

像往常一样,重载是相当标准的,看起来像这样:

CLASS operator=(const CLASS& rhs);

当我尝试在测试中使用它时:

CLASS A;
A = A;   //compile error here, saying self assignment to itself. have no clue why, though.

我想知道是否有特定的自测方法。谢谢。

仅供参考,以下是错误的快照

【问题讨论】:

  • 'An error would come up'你能不能具体说明一下,像往常一样请在这里!实际上,您要问什么还不清楚。此外,您提供的许多标签可能会不必要地缩小听众的注意力,以便为您的问题提供适当的答案。
  • 你的类是从其他类派生的吗?您的课程还提供了哪些其他方法?你的operator= 是如何实现的?
  • 我完全不确定,但 Eclipse 是否正试图为您防止错误?此链接报告的功能与您遇到的非常相似:ibm.com/developerworks/library/j-codan
  • 我不使用Eclipse,我不知道。该链接确实显示了一个设置页面,您可以在其中配置这些内容。我认为您必须自己找到并解决问题。
  • 投票重新开放。根据我的回答,有足够的信息可以高概率诊断问题。

标签: c++ eclipse-cdt googletest


【解决方案1】:

自赋值语句x = x;当然,这不是 C++ 中的错误 而且你这里没有任何编译器错误。

如果您运行项目的构建并查看 IDE 控制台中的输出 选项卡,而不是 Problems 选项卡,您会看到编译器确实 不报告这样的错误。除非它确实报告一些错误,否则您的项目将构建 成功。

如果您查看问题下报告的自分配错误 选项卡你会看到它的 TypeCode Analysis Problem,而不是 C/C++ Problem。 这意味着问题是由 Eclipse CDT 代码分析器报告的 (Codan),而不是编译器。

Codan 将自分配报告为错误,因为自分配是 几乎总是一个编程错误。但在你的情况下,这是故意的。

你有两个选择:

  • 1)。忽略代码分析错误
  • 2)。更改项目的代码分析设置,以便出现此错误 未报告。

要做2):

  • 导航 属性 -> C/C++ 常规 -> 代码分析
  • 启用使用项目设置
  • 要么:-
    • 禁用问题分配给自身,或
    • 选择Assignment to self,然后导航Customize Selected... -> Preferences 并将问题的严重性从 Error 更改为 WarningInfo
  • 确定退出项目属性

【讨论】:

  • 感谢您的回答。我想知道是否可以在未收到该步骤错误的情况下检查自分配。原因是自我分配很棒,我不想失去这种能力。
  • @STNYU 是的。重新阅读答案并注意如何将 Codan 错误转换为 warninginfo 诊断。并重复要点:无论 Codan 说什么,编译器仍会为您编译自赋值。
猜你喜欢
  • 2010-10-22
  • 2016-09-11
  • 2023-04-02
  • 2018-03-23
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多