2011-06-22 35 views
1

如何在C++中检查类是否为null?假设我有Line类:如何在C++中检查null类

Line line[1000]; 

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

我得到这个错误消息:

中没有匹配关于 '操作符=' '线[I] = 0'

+2

你的代码显示==,但你说错误是=? – crashmstr

+0

只是我的代码的一小部分 – brian

+1

是的,但:错误指定了operator =,您的代码显示==(这将是运算符==。这些不一样,并且错误与代码不匹配。 – crashmstr

回答

5

代码

Line line[1000]; 

创建线阵列中的1000点系列的对象,并将它们存储。对NULL的测试没有意义。你可以定义

Line* line[1000]; 

在这种情况下,你需要初始化数组,你的测试将工作。

+0

与Line *行[1000]和Line *行[1000] – brian

+0

风格有什么不同。如果你坚持使用后者,那么当你像'char * begin,* end'这样的事情看起来更好时 – mkb

+0

好吧我现在明白了thx – brian

1

指向一个实例可以是NULL而不是类实例。

0

ISO标准的第5.17节说

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

这是因为'='的重载操作符与您提供的任何重载实例都不匹配。

你需要将它初始化为Line *而不是简单的Line并且它应该起作用。如果你重载void *(例如new)会更好。

1

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

9

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

,如果你有自己的语义到零线是什么,你可以

  • 实现所谓IsNull()
  • 超载的operator void*和检查if(Lines[i])
+0

+1。'Overload the operator void * and if if(Lines [i])' – Nawaz

+0

@Nawaz:真正的+1 ?:D(不是我在意,我已经打了帽子,但无论如何:)) –

+0

哎呀..我忘了:P..Now +1。 :D – Nawaz

1

线的成员函数不是指针。每当你写道。 Line line[1000];

1000 of line get allocated. 

因此在该行之后不是NULL。

+1

我必须学习关于指针在C++ – brian

+1

是的。如果你不知道指针,你就缺少c/C++的强大功能。 –

+0

也有很多噩梦。 – VGE

0

要回答你的问题,line[0]的类型为Line&,它可以被理解为reference to a Line object。在C++中,引用不能是NULL

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