如何在struct上使用extern关键字

时间:2010-11-15 00:51:23

标签: c++ linux extern

请帮助我〜:)

代码complie在visual studio上成功。但是,在代码中无法编译linux,g ++。

代码..

A.H

struct Test { Test(); ~Test(); };

B.h

extern struct Test { Test(); ~Test(); };

A.cpp

#include "A.h"    
Test::Test()
{
    cout << "Construction" << endl;
}

Test::~Test()
{
    cout << "Destruction" << endl;
}

B.cpp

#include "B.h"
strcut A_Test : Test { A_Test(); ~A_Test(); };

当我在linux上编译代码时。我在描述中遇到了错误。

“只能为对象和函数指定存储类”

这个代码在linux上有什么问题?

谢谢你,所有人都理解我的傻瓜英语。

2 个答案:

答案 0 :(得分:4)

Test是一种数据类型,因此您无需使用extern。正如错误消息所示,extern仅适用于函数和对象。如果Visual Studio允许您的代码进行编译,那么这就是编译器中的“错误”。

extern的要点是告诉编译器不要担心它看不到的函数和对象,因为它们已在别处定义(这些将由链接器解析)。这对数据类型没有意义;编译器需要知道数据类型,以便生成正确的目标代码。

答案 1 :(得分:0)

外部使用的示例是

a.cpp

struct test myObj;

b.cpp

extern struct test myObj;

extern意味着编译器不会做任何事情,它会使该符号为未定义,它只是让它留给链接器完成其余的工作,记住当你编译b.cpp时给-c选项gcc, - c选项确保代码仅编译而不是链接,如下所示

g ++ -c b.cpp / *这将生成b.o * /

并编译主文件,如下所示

g ++ b.o a.cpp