当类类型需要声明为extern的时候,其成员应该如何声明??
说起来有点绕口,直接看代码(实际项目中代码的简化)
有三个文件
1.h中声明了两个类AB,B的成员有A的对象a。
1.cpp中就是A的一个函数,此函数需要使用B的对象b,但这个b是在2.cpp中定义并赋值的。
2.cpp包含主函数以及定义了b
1.h
- C/C++ code
#include <iostream>using namespace std;class A{public: A() { } A(int x) { i = x; } int i; void output();};struct B{ B() { } A a; int j;};
1.cpp
- C/C++ code
#include "1.h"extern B b; //声明b是一个外部变量void A::output(){ cout<<b.j<<endl;}
2.cpp
- C/C++ code
#include <iostream>#include "1.h"using namespace std;B b;b.j=2;b.a.i=1;int main(){ b.a.output(); cout <<b.a.i<<endl; return 0;}
但现在错误均指向2.cpp中给b赋值的b.j和b.a.i处,错误信息为:
error C2143: 语法错误 : 缺少“;”(在“.”的前面)
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
error C2371: “b”: 重定义;不同的基类型
如果是内置类型的话这样写extern应该是没错的吧,类类型在做extern的时候是有特别的要求么?
[解决办法]
b.j=2;
b.a.i=1;
这两句不能放到函数外,拿到main函数里面