ld返回了1个退出状态w/函数的多个定义
ld returned 1 exit status w/ multiple definition of function
可能有一个2秒的解决方案,但我在过去的一个小时里一直在努力解决这个问题,这让我抓狂。
我正试图将.cpp和.h文件链接到一个main.cpp文件中,以便在那里运行。但我在cpp文件中得到了每个函数的多重定义,这导致了"ld返回1退出状态"
我添加的函数越多,得到的错误就越多。
这是我的代码:
binaryHeap.h:
#ifndef Binary_H
#define Binary_H
#include <vector>
class BinaryHeap{
private:
std::vector <int> heap;
int left(int parent);
int right(int parent);
void heapifyUp(int index);
void heapifyDown(int index);
public:
BinaryHeap(); //Constructor
void insert(int element); //inserts element into heap
void deleteMin(); // deletes minimum element
int extractMin();
void displayHeap();
int size();
};
#endif //Binary_H
binaryHeap.cpp:
#include <iostream>
#include "binaryHeap.h"
BinaryHeap::BinaryHeap(){
}
void BinaryHeap::heapifyUp(int index){
int parent = (index - 1) / 2;
if(index != 0 && parent >= 0 && heap[parent] > heap[index]){
int temp = heap[index];
heap[index] = heap[parent];
heap[parent] = temp;
heapifyUp(parent);
}
}
void BinaryHeap::insert(int element){
heap.push_back(element);
heapifyUp(heap.size() - 1);
}
void BinaryHeap::displayHeap(){
std::vector<int>::iterator pos = heap.begin();
while (pos != heap.end()){
std::cout << *pos << std::endl;
pos++;
}
}
main.cpp:
#include "binaryHeap.cpp"
int main(int argc, char* argv[]) {
BinaryHeap h;
h.insert(5);
h.insert(2);
h.insert(19);
return 0;
}
错误如下:
main.o:main.cpp:(.text+0x0):的多重定义
BinaryHeap::BinaryHeap()' binaryHeap.o:binaryHeap.cpp:(.text+0x0): first defined here main.o:main.cpp:(.text+0x0): multiple definition of
BinaryHeap::BinaryHeap()'BinaryHeap.o:BinaryHeap.cpp:(.text+0x0):此处首次定义main.o:main.cpp:(.text+0x20):多重定义的BinaryHeap::heapifyUp(int)' binaryHeap.o:binaryHeap.cpp:(.text+0x20): first defined here main.o:main.cpp:(.text+0xfe): multiple definition of
BinaryHeap::insert(int)'BinaryHeap.o:BinaryHeap.cpp:(.text+0xfe):此处首次定义main.o:main.cpp:(.text+0x13e):多重定义的BinaryHeap::displayHeap()' binaryHeap.o:binaryHeap.cpp:(.text+0x13e): first defined here c:/program files (x86)/dev-cpp/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/bin/ld.exe: binaryHeap.o: bad reloc address 0x0 in section
.pdatea$_ZnwyPv'collect2.exe:错误:ld返回1退出状态C: \Users\~\Deskt\编码训练\二进制堆\Makefile.win:25:recipe目标"Binary"失败的mingw32-make.exe:***["Binary]错误1
根据我的评论,您决不能在任何其他文件中包含.cpp
文件。#include
所做的是将包含文件中的所有内容复制到包含它的位置。这意味着binaryHeap.cpp
的内容在代码中被编译两次。这就是错误告诉你的。
要解决案例中的错误-在main.cpp
中,将include更改为binaryHeap.h
。
编辑:添加更多解释:
include指令只是将文件源复制并粘贴到该位置。因此,如果将binaryHeap.cpp
包含在main.cpp
中,则binabyHeap
的源实际上被编译了两次。而且,一旦链接器开始组合对象文件,它就会获取binaryHeap.cpp
中的多个定义,并引发一些错误。
- 不同翻译单元中不可重载的非内联函数定义
- Visual Studio中的函数声明和函数定义问题
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 具有enable_if外部类原型的模板类构造函数定义
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为函数定义符号不明确的指针参数
- C++模板专用化 - 无法匹配函数定义
- 错误:在第 6 行'{'标记之前,此处不允许使用函数定义
- 找不到 #define 的函数定义
- 根据类型特征更改函数定义?
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 命名空间更改函数定义
- "Type&"与C++函数定义中的"Type*"
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 如何从 C++ 中的现有模板函数定义新函数
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 为什么c++允许成员函数定义中实例的私有成员访问
- Qt基类函数定义
- C++函数定义中参数列表后面额外一对括号的含义