链接类的未定义引用错误

时间:2014-04-22 03:31:29

标签: c++ include undefined-reference

对于我的生活,我无法弄清楚如何解决这个链接问题。我设置了一个简单的#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()'

2 个答案:

答案 0 :(得分:0)

testclass.c应为testclass.cpp

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

答案 1 :(得分:-1)

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

将TestClass定义更改为:

class TestClass
{
public:
    TestClass();

private:
    int value;
}

然后在main中,用

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

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