【问题标题】:Trouble with 'extern' Keyword'extern' 关键字的问题
【发布时间】:2011-03-16 05:01:39
【问题描述】:

我在一个 cpp 文件中有一组全局变量和一个方法。

int a;

int b;

int c;

void DoStuff()
{

}

在头文件中,我使用 extern 关键字显式声明了它们。我的问题是当我在另一个 C++ 文件中包含头文件时,我不能使用外部变量和方法。它给出了一个链接器错误,指出方法和变量的 error LNK2001: unresolved external symbol。我在这里做错了什么??

PS:DoStuff() 方法填充变量。所有头文件和cpp文件都在同一个项目文件夹中。

谢谢!

【问题讨论】:

    标签: c++ visual-c++ linker-errors extern unresolved-external


    【解决方案1】:

    试试这个

    在标题中定义这些变量,而不是仅仅声明它们。

    extern int x; 只是一个声明(不是定义)

    简单示例

    a.cpp

     int a,b,c; //definition
    
     void doStuff(){ 
    
     }
    

    b.cpp

    extern int a,b,c; //extern keyword is mandatory
    void doStuff();   //extern keyword is optional because functions by default have external linkage
    
    int main()
    {
    
       doStuff();
    }
    

    【讨论】:

      【解决方案2】:

      您必须在编译集中包含定义那些extern 变量和在您的标头中声明的函数的.cpp 文件。如果包含定义的 .cpp 文件未编译并链接到使用头文件中声明的文件,则会出现链接器错误。

      【讨论】:

        【解决方案3】:

        您确定要在与包含您的方法和变量的源文件相对应的目标文件中进行链接吗?

        【讨论】:

          【解决方案4】:

          由于您使用的是 Visual-C++(根据标签),因此我只需确保在编译时您的所有文件都在同一个项目中。确保您正在构建项目,而不仅仅是构建文件。

          我怀疑是这种情况,但您可能还想检查源文件是编译为 C 还是 C++,否则您可能会在命名方案上遇到一些问题。

          【讨论】:

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