以前我们使用malloc
进行动态内存分配,
struct node* node = (struct node*) malloc(sizeof(struct node));
工作得很好。
在进行重新分解时,我将其更改为,
struct node* node = new node;
它给了我错误,
错误1错误C2061:语法错误:标识符'节点'
为什么同一变量node
名称与函数(malloc)一起工作正常,而不适用于(new)。
我正在使用Visual Studio 2012.
答案 0 :(得分:2)
问题是:
struct node* node = new node;
^^^^
只要编译器看到带下划线的部分,令牌node
就会引用该变量。因此,当它处理new node
时,它是new name_of_a_variable
,这是没有意义的。要解决这个问题,你可以将变量称为不同的东西(无论如何这都是个好主意)。
malloc版本没有问题,因为你自己从不使用node
,你总是使用struct node
,它明确地是一个类型名称。
答案 1 :(得分:0)
确认另一个答案(说明是使用了关键字)
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
一起使用。
但正如已经指出的那样,最好为您的类型和变量选择不同的名称。