读书人

当类类型需要声明为extern的时候其成

发布时间: 2012-04-10 21:03:56 作者: rapoo

当类类型需要声明为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函数里面

读书人网 >C++

热点推荐