【问题标题】:Undefined reference error to linked class链接类的未定义引用错误
【发布时间】:2023-04-10 00:11:01
【问题描述】:

对于我的生活,我无法弄清楚如何解决这个链接问题。我设置了一个简单的#include,但仍然遇到同样的错误。我知道 IDE 知道文件是链接的,因为如果我移动头文件,我会得到各种其他错误。

为了记录,我正在使用 Propellor-GCC SimpleIDE

这是整个项目:

simplelink.cpp

#include "testclass.h"

int main(void)
{
  TestClass test1 = TestClass();

  return test1.value;
}

testclass.h(与simplelink.cpp在同一目录下)

#ifndef _MYSIMPLELINK_
#define _MYSIMPLELINK_

struct TestClass {
  TestClass();

  int value;
};

#endif

testclass.c

#include "testclass.h"

TestClass::TestClass() {
  value = 13;
}

这是我得到的输出:

propeller-elf-gcc.exe -v GCC 4.6.1 (propellergcc_v1_0_0_2162) propeller-elf-c++ -I . -L . -o cmm/simplelink.elf -Os -mcmm -Wall
-m32bit-doubles -fno-exceptions -fno-rtti simplelink.cpp 
C:\Users\Virtual\AppData\Local\Temp\cc81YpVR.o: In function `_main': 
(.text+0x9): undefined reference to `TestClass::TestClass()' 
collect2: ld returned 1 exit status 
Done. Build Failed!

Check source for bad function call or global variable name `TestClass::TestClass()'

【问题讨论】:

  • testclass.c 重命名为 testclass.cpp

标签: c++ include undefined-reference


【解决方案1】:

当您需要的是 class 时,您正试图将构造函数放入 struct

将您的 TestClass 定义更改为:

class TestClass
{
public:
    TestClass();

private:
    int value;
}

然后在main中,用

实例化一个TestClass对象
TestClass test1 = new TestClass();

此外,如其他回复中所述,将 testclass.c 重命名为 testclass.cpp 并在链接之前构建所有 .cpp 文件。

【讨论】:

    【解决方案2】:

    testclass.c 应该是 testclass.cpp

    您还需要将simplelinktestclass 链接到您的可执行文件中。将testclass.cpp 附加到您的构建字符串可以做到这一点,尽管您可能希望您的makefile 首先为每个.cpp 构建目标文件,然后链接目标文件。

    【讨论】:

      猜你喜欢
      • 2015-01-23
      • 2014-06-26
      • 2014-04-21
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      相关资源
      最近更新 更多