【问题标题】:Extern variables C++外部变量 C++
【发布时间】:2025-09-15 09:45:02
【问题描述】:

我有一个 struct,我想在运行 main 的地方填写一个单独的源文件。在头文件中,我包含了 extern,但是当我在源文件中定义变量时它不起作用。

    //This is a header file
    struct example {
         int data1;
         float data2;
         bool example;
    }

    extern example tmp;

然后在一个源文件中:

example *tmp = new example;

我收到错误“Expected unqualified-id”。这是为什么呢?

【问题讨论】:

  • 你真的环顾四周了吗? *.com/questions/1433204/… 这里回答得很好。我也没有明白:你为什么使用不同的数据类型?(ptr 和 var)
  • 我确实环顾四周,已经看到了。但是,它对这个特定实例没有帮助。我使用 ptr 是因为当我没有收到错误消息时:“没有从 'example*' 到 'example' 的可行转换”。我在答案的 cmets 中也提到了这一点。

标签: c++ declaration extern


【解决方案1】:
  • 结构声明后缺少分号。
  • extern 声明中的类型和定义不同:example vs example*

【讨论】:

  • 抱歉,逗号打错了。我的代码中有逗号。我删除了星号,现在我的代码显示为:“example tmp = new example;”然而,这会得到一个错误,上面写着:“没有从 'example*' 到 'example' 的可行转换”
  • 那是因为new返回了一个指向分配内存的指针!
  • @phantazein 假设 cmets,我必须问:你知道指针和内存分配是如何工作的吗?如果您不完全了解,请再试一次 - 这不是冒犯,我不是一天学会的,但我学会了。回到你的问题:如果你创建外部指针,那么它是外部指针而不是(一个简单的)变量。因此,声明“extern example tmp”然后使用“example* tmp”是错误的,因为第一个不是指针。创建“extern example tmp”然后分配是错误的,因为 tmp 不是指针。这意味着您根本不需要使用 new 关键字,或者您应该在 .h 中声明指针。