【问题标题】:Eclipse/GCC: Undefined Reference to Extern VariableEclipse/GCC:对外部变量的未定义引用
【发布时间】:2013-10-17 13:41:15
【问题描述】:

对不起,如果这是一个重复的问题,但我已经搜索了几个小时,我得到了相互矛盾的答案......更糟糕的是,他们都没有工作。

这很简单。我有很多源文件,我有一些我想放在一个文件中的常用参数,比如“Parameters.h”。我想在运行时设置这些参数(一次),方法是将它们作为参数传递给程序。

PS:我知道更好的方法是将所有内容作为参数传递给函数,但这是一段笨重的代码,我需要尽快得到结果,而无需进行太多更改。

这是一个最小的工作示例:

Parameters.h

#ifndef PARAMETERS_H_
#define PARAMETERS_H_

extern int Alpha;

#endif

ma​​in.cpp

#include <iostream>
#include "Parameters.h"

int main(int argc, char * argv[])
{
    const int Alpha = 12.0;
}

函数.cpp

#include "Parameters.h"

double Foo(const double& x)
{
    return Alpha*x;
}

当我编译时

gcc main.cpp Functions.cpp

我收到错误“Functions.cpp:(.text+0xa): undefined reference to `Alpha'”。

【问题讨论】:

    标签: c++ eclipse gcc linker global-variables


    【解决方案1】:

    您已经声明了一个名为Alpha 的全局变量,但您还没有定义它。在一个源文件中,在文件范围内写入:

    int Alpha;
    

    或使用初始化器:

    int Alpha = 42;
    

    请注意,您在main 中定义的名为Alpha 的局部变量与此全局变量不同且完全无关。

    【讨论】:

    • 非常感谢!正如你所说,问题是我没有在 main.cpp 的文件范围内定义 Alpha。现在我觉得自己像个白痴 :-) 再次感谢。
    • 考虑到声明在头文件中,是否需要将 Alpha 定义为 extern
    • @ldgorman:如果您不使用extern,那么它将是一个定义,而不仅仅是一个声明。如果您随后将此标头包含到多个源文件中,则会收到有关同一符号的多个定义的链接器错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2012-06-14
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多