编辑:找到了答案,这是一个简单的错误。我不觉得这是重复的,因为我知道错误指示的内容(主要功能无法找到对象类的引用),我只是认为我已经正确地包含它并需要另一组眼睛指向在我的makefile行中输出错误。
如果我使用错误的术语,或者我误解了一些简单的术语,我会提前道歉。我对C和C#略有熟悉,这是我尝试使用C ++的尝试。代码中还有其他问题,例如命名不一致但请忽略它们,因为它们不是手头的问题。我也正在重组/重新编写项目,请原谅这个烂摊子。
我一直在使用 vim 编写一个小型C ++应用程序,并使用 g ++ 进行编译。它一直工作到一定程度。这个错误对我没有意义,所以我决定尝试 Clion 试图调试它,但令我惊讶的是,它构建并按预期运行。
从终端,我进入项目根目录(src
上方一级)并运行make
:
g++ -c src/item.cpp -o obj/item.o
g++ -c src/hero.cpp -o obj/hero.o
g++ -c src/main.cpp -o obj/main.o
g++ -o oChre.exe obj/hero.o obj/main.o -lm
obj/main.o: In function `main':
main.cpp:(.text+0x467): undefined reference to Hand::Hand(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
main.cpp:(.text+0x49e): undefined reference to `Item::getName[abi:cxx11]()'
collect2: error: ld returned 1 exit status
makefile:7: recipe for target 'program' failed
make: *** [program] Error 1
从 Clion 内部,我只需点击构建和运行,项目就会按照我的预期完成并运行。
我的makefile如下:
CC=g++
EXT=o
PURGE=rm
#The main bin
program: item.o hero.$(EXT) main.$(EXT)
$(CC) -o oChre.exe obj/hero.$(EXT) obj/main.$(EXT) -lm
main.o:
$(CC) -c src/main.cpp -o obj/main.o
#Creatures
hero.o:
$(CC) -c src/hero.cpp -o obj/hero.o
#items
item.o:
$(CC) -c src/item.cpp -o obj/item.o
clean:
$(PURGE) obj/*.$(EXT) *.exe
我怀疑Clion没有使用我的makefile,因为IDE通常能够确定编译什么以及如何自己编译。这就是我认为Clion成功运行的原因。
如果有人可以回答以下一个或两个问题,我希望如此:
如果我遗漏了一些重要的内容,请在GitHub上询问或填写所有代码。
答案 0 :(得分:2)
您的链接命令缺少item.o
#The main bin
program: item.o hero.$(EXT) main.$(EXT)
$(CC) -o oChre.exe obj/hero.$(EXT) obj/main.$(EXT) -lm
应该是
#The main bin
program: item.o hero.$(EXT) main.$(EXT)
$(CC) -o oChre.exe obj/item.o obj/hero.$(EXT) obj/main.$(EXT) -lm