【问题标题】:how to use extern keyword on struct如何在结构上使用 extern 关键字
【发布时间】:2010-11-15 00:51:22
【问题描述】:

请帮帮我~:)

在 Visual Studio 上编译成功。但是,Under code 无法在 linux、g++ 上编译。

代码..

啊.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上有什么问题?

谢谢大家,请理解我愚蠢的英语。

【问题讨论】:

    标签: c++ linux extern


    【解决方案1】:

    Test 是一个数据类型,所以你不需要使用extern。正如错误消息所说,extern 仅适用于函数和对象。如果 Visual Studio 允许您的代码编译,那么这是编译器中的“错误”。

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

    【讨论】:

    • 感谢您的帮助!祝你有美好的一天!
    • 然后,当我想继承测试时,case 为 B.cpp。我必须包含“A.h”?
    【解决方案2】:

    extern 用法示例

    a.cpp

    结构测试 myObj;

    b.cpp

    外部结构测试 myObj;

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

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

    并编译主文件,如下所示

    g++ b.o a.cpp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多