在构造函数Node = new Node [Number of Nodes];和Edge = new Edge [numberOfEdges];给出标识符错误?它有什么问题?
typedef struct node
{
int id;
int x;
int y;
} Node;
typedef struct edge
{
int id;
Node node1;
Node node2;
} Edge;
class graph
{
private:
int numberOfNodes;
int numberOfEdges;
int *Node;
int *Edge;
public:
graph(int nodes, int edges)
{
numberOfNodes = nodes;
numberOfEdges = edges;
Node = new Node[numberOfNodes];
Edge = new Edge[numberOfEdges];
}
答案 0 :(得分:2)
您有各种变量名称冲突,包括变量声明int* Node
与typedef Node
之间的冲突。此外,如果节点数组应为类型int*
,则将其声明为类型Node*
。您对Edge
执行相同的操作。请尝试以下方法:
class graph
{
private:
int numberOfNodes;
int numberOfEdges;
Node* nodes_;
Edge* edges_;
public:
graph(int num_nodes, int num_edges)
{
numberOfNodes = num_nodes;
numberOfEdges = num_edges;
nodes_ = new Node[numberOfNodes];
edges_ = new Edge[numberOfEdges];
}
};
另外,仅仅是为了将来,在C ++中真的没有typedef struct { }
成语。它的主要目的是让C程序员不必经常使用单词struct
作为结构变量的前缀。但是在C ++中这没有必要,所以当你只能说typedef struct node { ... } Node;
时,通常没有理由说struct Node { ... };
。有关详细信息,请参阅here。
答案 1 :(得分:0)
在您的构造函数中,Node
和Edge
引用该类的int*
成员,不全局范围内的类型名称。您必须表明您指的是全局类型:
Node = new ::Node[numberOfNodes];
Edge = new ::Edge[numberOfEdges];
编辑:当然,这仍然会让人类读者感到困惑。为了您的读者,建议将类型和变量名称分开。
答案 2 :(得分:0)
编译器对于您使用Node
和Edge
作为类型标识符(在typedef ... Node;
中)和作为类成员(int *Node
)这一事实感到困惑。我也困惑了一会儿。你真的不能这样做。一般来说,为类型,成员和变量选择不同的名称是个好主意。
答案 3 :(得分:0)
对不起,我写了无意义的东西..就是这样。但是我仍然得到了错误: Eerror C2440:'=':无法从'Edge *'转换为'int'
public:
graph(int nodes, int edges)
{
numberOfNodes = nodes;
numberOfEdges = edges;
nodes = new Node[numberOfNodes];
edges = new Edge[numberOfEdges];
}