【发布时间】:2013-12-08 10:50:21
【问题描述】:
相信我,我在这里浏览过好几篇文章,但没有一篇文章解决了我遇到的问题。我有这个运行了 2 年的程序。我正在恢复它,但由于某种原因它现在无法运行。
很明显,我有多个定义(太多了):
============================= 终端输出================= =============
build_files/LinkedStack.o: In function `LinkedStack':
/home/owner/workspace/opencv-galaxies/utilities/structures/LinkedStack.cpp:12: multiple definition of `LinkedStack::LinkedStack()'
build_files/LinkedStack.o:/home/owner/workspace/opencv-galaxies/utilities/structures/LinkedStack.cpp:12: first defined here
... 以此类推,以此类推,... 这一切都以:
collect2: ld returned 1 exit status
make: *** [executables/Assignment3.out] Error 1
================================================ ==========================
奇怪的是,链接器并没有在广泛的警告列表中指出任何错误,更不用说这些不是真正的多重定义。请注意,“多个...-首次定义...”对中的每个警告都指的是同一行。现在我不知道该怎么办了。
我想知道这是否与我们的 makefile 相当繁忙的语法有关(虽然它看起来对我来说真的很好):
================================MAKEFILE =============== ===================
CFLAGS = -g -Wno-deprecated
OBJECTS = utilities/basic/image.h build_files/image.o build_files/ReadImage.o build_files/ReadImageHeader.o build_files/WriteImage.o build_files/LinkedStack.o build_files/unsortedList.o build_files/region.o build_files/Main.o
executables/Assignment3.out: $(OBJECTS)
g++ $(OBJECTS) -o executables/Assignment3.out build_files/*.o $(CFLAGS) -lncurses
...
build_files/LinkedStack.o: utilities/structures/LinkedStack.h utilities/structures/LinkedStack.cpp
g++ -c $(CFLAGS) utilities/structures/LinkedStack.cpp -o build_files/LinkedStack.o
...
clean:
rm build_files/*.o executables/Assignment3.out
================================================ ============================
所以,这些是我的问题:1)为什么链接器会看到错误以及 2)为什么我有这么多多个定义?
如果您想澄清一下,即使您对发生的事情有所了解,也请告诉我。
=============================== 代码示例 =============== ===============
这是完整的示例函数(我不想让它太长):
//constructor
LinkedStack::LinkedStack()
{
topPtr = NULL; //set top pointer to null
}
================================================ ==========================
【问题讨论】:
-
缩小范围并发布代码的精简版本 - 使用 1 个方法保留类。
-
@LuchianGrigore :我应该对 makefile 做同样的事情吗?
-
那些是错误,而不是警告(即使它没有说“错误:多重定义......”)。现在,请想象您自己是另一个 SO 用户(像我一样),您不希望看到一些 实际代码(C++ 代码)能够提供帮助吗? (另见sscce.org)因为目前我们能做的最好的就是盲目猜测(比如,“你没有在标题中包含 .cpp 文件,是吗?”)...
-
@gx_ :对不起;我只是觉得我给的就足够了。无论如何,帖子已更新。回答你的问题,不;它是.cpp文件中包含的头文件,即.cpp文件中的
#include "LinkedStack.h"。 -
@gx_:我不认为这是盲目的猜测。我认为这是事实。
标签: c++ linker multiple-definition-error