我知道对于一个定义规则我可以在多个翻译单元中定义一个类,如果它们具有相同顺序的相同标记,但这个程序对我来说很奇怪
档案 main.cpp
#include "Source.h"
struct mystructure
{
int field1;
float field2;
};
int main()
{
mystructure myvar;
myvar.field2= 2.0f;
myCustomFunction(myvar);
return 0;
}
档案 Source.h
struct mystructure;
void myCustomFunction(mystructure& vv);
文件 Source.cpp
#include "Source.h"
struct mystructure
{
char otherfield;
int anotherone;
bool anotheranotherone;
};
void myCustomFunction(mystructure& vv)
{
vv.otherfield = 'A';
}
我正在使用MSVC2012,编译器没有抱怨。这是为什么?这是正常的吗?
答案 0 :(得分:3)
编译器很难抱怨,因为它在同一编译期间从未看到过冲突的声明。但是这段代码不正确,不幸的是编译器没有收到任何错误,标准也没有要求它们。
答案 1 :(得分:2)
它没有抱怨,因为结构名称实际上并不是作为翻译单元的符号导出的。它们仅在编译器中使用。因此,即使您定义了两个具有相同名称的结构,也不会出现链接器错误。
然而,由于结构不匹配,您将得到未定义的行为。