以前我们使用malloc
进行动态内存分配,
struct node* node = (struct node*) malloc(sizeof(struct node));
它工作正常。
在进行重构时,我将其更改为,
struct node* node = new node;
它给了我错误,
错误1 错误 C2061:语法错误:标识符"节点"
为什么相同的变量node
名称适用于函数(malloc),而不适用于(新)。
我正在使用Visual Studio 2012。
问题是:
struct node* node = new node;
^^^^
一旦编译器看到带下划线的部分,令牌node
就会引用该变量。所以当它处理new node
时,它是new name_of_a_variable
没有意义的。要解决此问题,您可以将变量称为其他名称(无论如何,这是一个好主意)。
malloc 版本没有问题,因为您从不单独使用 node
,您始终使用 struct node
它明确是一个类型名称。
确认另一个答案(说是使用关键字 struct
使malloc
示例能够编译),该程序使用 C++14 编译并在 https://ideone.com 上运行:
#include <iostream>
struct node { int x; };
int main()
{
struct node* node = new struct node;
node->x = 1;
std::cout << node->x << std::endl;
return 0;
}
因此,struct node
您可以在具体的例子。 这确实是相同的问题和解决方案无论您将node
与new
一起使用还是与malloc
一起使用.
但正如已经指出的,最好为您的类型和变量选择不同的名称。