C2039:'E'不是“节点”错误的成员

时间:2014-11-20 18:16:46

标签: c++

E是Node结构中的成员,但我仍然收到C2039错误?这是我的代码:

#include "datastructures.h" //datastructures.cpp//
#include "utility.h"
#include "Functions.h"

bool enqueue(Queue &Q, enemy e){
    Node *dptr = new Node;
    if (dptr == NULL){
        return false;
        dptr->E  = e;    //C2039 here//
        if (Q.rear == NULL){
            Q.rear = Q.head = dptr;
            return true;
        }
        dptr->next = NULL;
        Q.rear = dptr;
        return true;
    }
}

有什么想法吗?

抱歉,我忘了给出结构定义

struct Node{
    enemy E;
    Node *next;
};

struct enemy{
    //starting x,y
    int ID;
    int T;
    int Region;
    int Distance;
    float Health;
    int Type;
    int Pr;
    int P;
};

2 个答案:

答案 0 :(得分:1)

您需要在enemy之前定义Node,因为Node具有该类型的成员,并且成员的类型在声明时必须完整。< / p>

答案 1 :(得分:0)

当要在另一个结构中使用一个结构时,必须首先声明另一个结构中包含的结构。在这种情况下,必须在struct Node上方声明作为struct Node成员的struct敌人。这使结构节点可以知道结构敌人是什么或其所有成员。

struct enemy{
    //starting x,y
    int ID;
    int T;
    int Region;
    int Distance;
    float Health;
    int Type;
    int Pr;
    int P;
};

struct Node{
    enemy E; //struct enemy is defined before used here
    Node *next;
};