使用以下代码:
#include <stdio.h>
struct my_struct {
int a;
int b;
my_struct();
};
my_struct::my_struct(void)
{
printf("constructor\n");
}
void my_struct(void)
{
printf("standard function\n");
}
int main (int argc, char *argv[])
{
struct my_struct s;
s.a = 1;
s.b = 2;
printf("%d-%d\n", s.a, s.b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到一个用g ++ -Wshadow main.cpp编译的警告:
main.cpp:15:20: warning: ‘void my_struct()’ hides constructor for ‘struct my_struct’
Run Code Online (Sandbox Code Playgroud)
如果void my_struct函数实际上替换了my_struct :: my_struct,那么我可以使用该警告.但似乎并非如此.如果我运行该程序,我得到:
constructor
1-2
Run Code Online (Sandbox Code Playgroud)
知道这个警告意味着什么吗?特别是当我将C头包含在C++代码中时,这非常烦人
该警告指出该my_struct()
函数与my_struct
结构具有相同的名称.这意味着你将无法写:
my_struct s; // Error.
Run Code Online (Sandbox Code Playgroud)
因为编译器会认为您正在使用函数作为类型.但是,正如您可能已经意识到的那样,您仍然可以使用struct
关键字实例化您的结构:
struct my_struct s; // Valid.
Run Code Online (Sandbox Code Playgroud)