为什么函数允许使用变量名和数据类型名,而不能使用关键字?
Why variable name and datatype name is allowed with function but not with keyword?
之前我们使用malloc
进行动态内存分配,
struct node* node = (struct node*) malloc(sizeof(struct node));
它运行良好。
在进行重构时,我将其更改为,
struct node* node = new node;
它给我错误,
Error 1 error C2061: syntax error : identifier 'node'
为什么相同的变量 node
名称可以在函数 (malloc) 中正常工作,而不能在 (new) 中使用。
我正在使用 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
.
一起使用
但是正如已经指出的那样,最好为您的类型和变量选择不同的名称。
之前我们使用malloc
进行动态内存分配,
struct node* node = (struct node*) malloc(sizeof(struct node));
它运行良好。
在进行重构时,我将其更改为,
struct node* node = new node;
它给我错误,
Error 1 error C2061: syntax error : identifier 'node'
为什么相同的变量 node
名称可以在函数 (malloc) 中正常工作,而不能在 (new) 中使用。
我正在使用 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
.
但是正如已经指出的那样,最好为您的类型和变量选择不同的名称。