0

好的,我有一个结构数组,(不是指向结构的指针数组),-lesson- 也是一个内部有一些属性的类..

struct Mystruct{
    lesson* data;
    mystruct* next;
};    

class Myclass{
    public:
        Myclass();
        Mystruct getarray();
    private:
        Mystruct* array;
};
//in the myclass(); constructor I am doing;
Myclass* array = new Myclass[8];

我需要知道是否

array[i].next

是否为空,因为它不是指向结构的指针数组,所以我不能这么说;

if(array[i] == NULL)

或者

if(&(array[i]) == NULL)

我该怎么做,我正在寻找的答案不是“它是一个结构数组,你根本无法进行此检查,如果它是一个指针....bla bla”。请帮我找到一种方法,非常感谢所有答案和方法..

* *编辑:让我为你澄清一下,我需要检查一下;

array[i].next = new lesson(//parameters);

此操作是否完成,我需要知道数组第 [i] 个元素中的“下一个”对象是否已初始化。(数组的第 [i] 个元素包含一个链表,我正在搜索列表并向其中添加对象,如果列表头不为空,我必须找到一种方法来解决这个问题并在末尾添加对象链表)

我怎么能更清楚,但有人只是点击不喜欢按钮而不是试图帮助,这是一个严肃的问题而不是巨魔,我试图尽可能地更清楚,但你们没有帮助,只是点击离开,我还能说什么......:/

我添加了更多代码供您想象这种情况。

4

2 回答 2

2

是否为空,

定义“空”。你的意思是未初始化?如果是这样,那么只需将每个元素初始化为某个默认值。初始化指向nullptr(C++11) 或的指针0,然后在使用它们之前进行检查。对象为“空”是没有意义的。

另请注意,那MyClass是……好吧,根本不是一堂课。反正...

如果您只是使用默认构造函数,那有什么意义呢?当您分配此内存时,它将被默认构造的对象填充,所以...

struct Mystruct
{
    Mystruct()
      : data(nullptr), next(nullptr) {}

    lesson* data;
    myclass* next;
}; 

现在您正确初始化指针xy为空。


根据您的编辑...

编辑:让我为你澄清一下,我需要检查一下;

array[i].next = new course(//参数); 此操作是否完成,我需要知道数组第 [i] 个元素中的“下一个”对象是否已初始化。

对,所以因为我们现在正确地初始化了成员变量......

if(!array[i].next)
    // next is null, initialize it
于 2012-11-01T22:56:51.767 回答
0

我假设您问题中的 Mystruct 和 Myclass 是同一类型。

只需将 empty() 成员函数添加到您的结构中,然后调用它:

struct Mystruct{
    lesson* data;
    myclass* next;
    bool empty() const { return next == 0; }
};    

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (array[2].empty()) { ....; }

或者添加全局函数empty():

struct Mystruct{
    lesson* data;
    myclass* next;
};    
bool empty(const Mystruct& o) const { return o.next == 0; }

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (empty(array[2])) { ....; }

或者只是手动检查下一个成员:

struct Mystruct{
    lesson* data;
    myclass* next;
};    

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (array[2].next == 0) { ....; }

顺便说一句,不是将指针与 0 进行比较,而是将其与 nullptr 进行比较(如果只有您的编译器支持 nullptr)。

于 2012-11-01T23:24:14.910 回答