【发布时间】:2013-12-21 18:28:46
【问题描述】:
我查看了其他人提出的问题,但似乎没有一个解决方案有效。我对makefile编译不够了解。但这是我的makefile:
program.out: bzstrlib.o DataStructures.o Classes.o main.o
g++ -o program.out bzstrlib.o DataStructures.o Classes.o main.o
bzstrlib.o: bzstrlib.cpp bzstrlib.h
g++ -c bzstrlib.cpp
DataStructures.o: DataStructures.cpp DataStructures.h
g++ -c DataStructures.cpp
Classes.o: Classes.cpp Classes.h
g++ -c Classes.cpp
main.o: main.cpp bzstrlib.cpp bzstrlib.h DataStructures.cpp DataStructures.h Classes.cpp Classes.h
g++ -c main.cpp
clean:
rm *.o program.out
我一定是设置不正确,因为我不断收到错误消息Classes.o: In function 'Player::dealCard(Card const&)':
Classes.cpp:(.text+0x735): undefined reference to 'List<Card>::gotoEnd()'
collect2: ld returned 1 exit status.
Player 在Classes 中定义,List<>::gotoEnd() 在DataStructures 中定义。
让我更加困惑的是,在调用gotoEnd() 之后的那一行是对同一标题中定义的另一个函数的调用。如果我注释掉 gotoEnd() 调用,那么即使存在其他函数,我也不会收到编译器错误。
我有 7 个文件:
Main.cpp:#includes "Classes.h" 和 "DataStructures.cpp"
bzstrlib.h:不包含任何头文件
DataStructures.h:不包含任何标题
Classes.h:#includes "DataStructures.h"
bzstrlib.cpp:#includes "bzstrlib.h"
DataStructures.cpp:#includes "DataStructures.h"
Classes.cpp:#includes “bzstrlib.h”、“Classes.h”和“DataStructures.h”
【问题讨论】:
-
你为什么不用make的隐含规则?
-
向我解释您所指的具体规则。我从来不明白makefile是如何工作的。我想确切地知道我做错了什么以及在哪里;我在这里阅读了无数其他问题,但无法理解答案,因为它们并不特定于我的场景。
-
@user1362548 让一个像样的 IDE(例如 Eclipse CDT)为您生成一些并研究这些以获得第一手!
-
Classes.o应该有DataStructures.h作为先决条件,但这不会导致此错误。你能告诉我们DataStructures.cpp吗?
标签: c++ header makefile include