【问题标题】:C++ Undefined Reference (Even with Include)C++ 未定义参考(即使包含)
【发布时间】:2010-10-15 19:19:53
【问题描述】:

如果不将 TestClass.cpp 文件明确包含在我的 main.cpp 文件中,我将无法编译这段简单的代码。我究竟做错了什么?提前致谢!

代码如下:

TestClass.h

#ifndef TESTCLASS_H_
#define TESTCLASS_H_

class TestClass
{
    public:
        static int foo();
};

#endif

TestClass.cpp

#include "TestClass.h"

int TestClass::foo() { return 42; }

main.cpp

#include <iostream>

#include "TestClass.h"

using namespace std;

int main()
{
    cout << TestClass::foo() << endl;

    return 0;
}

这是错误:

g++ main.cpp -o main.app
/tmp/ccCjOhpy.o: In function `main':
main.cpp:(.text+0x18e): undefined reference to `TestClass::foo()'
collect2: ld returned 1 exit status

【问题讨论】:

    标签: c++ include


    【解决方案1】:

    在命令行中包含TestClass.cpp,这样链接器就可以找到函数定义:

    g++ main.cpp TestClass.cpp -o main.app
    

    或者,将每个编译成自己的目标文件,然后告诉编译器将它们链接在一起(它将它们转发到链接器)

    g++ -c main.cpp -o main.o
    g++ -c TestClass.cpp -o TestClass.o
    g++ main.o TestClass.o -o main.app
    

    【讨论】:

    • 多么奇怪!我以前从未遇到过这个问题。我是 C++ 新手,我想我一直有一个 IDE 为我做这件事。难怪!谢谢!
    • @Scott - 这就是为什么你应该在命令行上花一些时间;)。它清楚地表明了 IDE 对你隐藏的东西......
    • 我不同意重命名文件。实际上,文件以其包含的内容命名,与内容的大小写一致(函数“main”和类“TestCase”)。
    • 我同意。这也是一致的。我会改变我的答案。很好的收获
    【解决方案2】:

    您没有针对TestClass.cppfoo() 的实现所在)进行编译和链接。因此,编译器抱怨您尝试使用未定义的函数。

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 2021-06-02
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多