【问题标题】:How to check null class in C++如何在 C++ 中检查空类
【发布时间】:2011-09-20 09:27:51
【问题描述】:

如何在 C++ 中检查一个类是否为空?假设我有课Line:

Line line[1000];

if (line[0] == NULL)
   cout << "NULL";
else
   cout << "NOT NULL";

我收到此错误消息:

'line[i] = 0' 中的 'operator=' 不匹配

【问题讨论】:

  • 你的代码显示==,但是你说的错误是=?
  • 那只是我代码的一小部分
  • 是的,但是:错误指定 operator=,您的代码显示 ==(这将是 operator==。这些不一样,并且错误与代码不匹配。
  • 所以你只发布了你代码中不相关的部分,你希望我们做......究竟是什么?

标签: c++ class null


【解决方案1】:

我猜您有 .NET 或 Java 背景。在 C++ 中,类类型的对象不能为 NULL。如果您将 pointers 数组存储到 Line,那将是另一回事,您的语法将是有效的。

现在,如果你对什么是 NULL Line 有自己的语义,你可以

  • 实现一个名为IsNull()的成员函数
  • 重载operator void*并检查if(Lines[i])

【讨论】:

  • @Nawaz:实际的 +1 在哪里? :D(我不在乎,我已经达到了上限,但无论如何:))
  • 哎呀..我忘了:P..现在+1。 :D
【解决方案2】:

代码

Line line[1000];

创建 1000 个 Line 对象并将它们存储在线阵列中。针对 NULL 的测试毫无意义。你可以定义

Line* line[1000];

在这种情况下,您需要初始化数组并且您的测试会起作用。

【讨论】:

  • Line* line[1000] 和 Line *line[1000] 有什么不同
  • 风格。如果你坚持后者,那么当你做char *begin, *end之类的事情时看起来会更好
  • 值得注意的是,无论如何,您不应该真的与 NULL 比较指针,而应该使用if (ptr == 0),根据某些编码标准,这更安全(我认为 NULL 可以依赖于实现)。
  • @icabod:你大错特错了。与 NULL 进行比较就像与 0 进行比较一样安全,即使在某些实现中空指针的值实际上并非全为 0 位
  • NULL 是一个古老的词哈哈哈 :-)
【解决方案3】:

指向实例的指针可以是 NULL 而不是类实例。

【讨论】:

    【解决方案4】:

    您的 Line 类不为 NULL。您有 1000 个 Line 实例,由默认构造函数创建。可以说,您可以使用 Line &amp; operator == (const int ) const 测试 NULL,然后比较一些内部成员,但这样做很奇怪。

    【讨论】:

      【解决方案5】:

      行不是指针。每当你写。 Line line[1000];

      1000 of line get allocated. 
      

      所以在那一行之后不能为NULL。

      【讨论】:

      • 是的。如果你不知道指针,你就错过了 c/c++ 的强大功能。
      【解决方案6】:

      ISO 标准第 5.17 节说

      有几个任务 运算符,所有这些组 右到左。都需要一个 可修改的左值作为他们的左边 操作数和赋值类型 表达式是它的左边 操作数。分配的结果 操作是存储在 赋值后的左操作数 发生在;结果是一个左值。

      这是因为“=”的重载运算符与您提供的任何重载实例都不匹配。

      您需要将其初始化为 Line * 而不仅仅是 Line,它应该可以工作。如果重载 void*(例如 new)会更好。

      【讨论】:

        【解决方案7】:

        为了回答您的问题,line[0] 的类型为Line&amp;,可以读作reference to a Line object。在 C++ 中,引用不能是 NULL

        您问题中的错误消息似乎来自您尚未发布的代码行。我只能根据您尝试将值0 分配给位于索引i 的线对象的错误消息进行推测。因为= 运算符没有在Line 类中重载,所以编译器无法解决类型差异。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-19
          • 2013-02-24
          • 2013-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多