继承时体系结构x86_64的未定义符号
Undefined symbols for architecture x86_64 when inheriting
我有一个C++代码,我试图使用继承来重用我的代码。但是当我编写代码时,我会得到以下错误:
体系结构x86_64的未定义符号:"QuickUnion::QuickUnion(int)",引用自:_main in mainld:找不到体系结构x86_64 的符号
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
制造商:***[a.out]错误1
我的制作文件:
CC = g++
CFLAGS = -std=c++11 -Wall -c
LFLAGS = -std=c++11 -Wall
DEBUG = -g
OBJS = main.o unionfind/UnionFind.o unionfind/QuickUnion.o
a.out: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) $(DEBUG)
main.o: main.cpp
$(CC) $(CFLAGS) main.cpp $(DEBUG)
unionfind/QuickUnion.o: unionfind/UnionFind.h unionfind/QuickUnion.h unionfind/QuickUnion.cpp
$(CC) $(CFLAGS) unionfind/QuickUnion.cpp $(DEBUG)
unionfind/UnionFind.o: unionfind/UnionFind.h unionfind/UnionFind.cpp
$(CC) $(CFLAGS) unionfind/UnionFind.cpp $(DEBUG)
UnionFind.h和.cpp:
#ifndef UNIONFIND_H
#define UNIONFIND_H
#include <vector>
class UnionFind {
protected:
int connectedComponents;
std::vector<int> parents;
public:
UnionFind(int);
virtual void connect(int, int) = 0;
virtual int find(int) = 0;
bool connected(int, int);
int count();
};
#endif
...
#include "UnionFind.h"
UnionFind::UnionFind(int size): parents(size) {
connectedComponents = size;
for (int i = 0; i < size; i++) {
parents[i] = i;
}
}
bool UnionFind::connected(int p, int q) {
return find(p) == find(q);
}
int UnionFind::count() {
return connectedComponents;
}
QuickUnion.h和.cpp:
#ifndef QUICKUNION_H
#define QUICKUNION_H
#include <vector>
#include "UnionFind.h"
class QuickUnion: public UnionFind {
public:
QuickUnion(int);
void connect(int, int);
int find(int);
};
#endif
...
#include "QuickUnion.h"
QuickUnion::QuickUnion(int size): UnionFind(size) {
}
void QuickUnion::connect(int p, int q) {
int pRoot = find(p);
int qRoot = find(q);
if (pRoot == qRoot) {
return;
}
parents[pRoot] = qRoot;
connectedComponents--;
}
int QuickUnion::find(int p) {
while (p != parents[p]) {
p = parents[p];
}
return p;
}
main.cpp
#include <iostream>
#include "unionfind/QuickUnion.h"
using namespace std;
int main() {
QuickUnion qu(10);
cout << "Count:" << endl;
cout << qu.count();
}
也许这与构造函数有关,但我既不知道为什么会发生这个错误,也不知道如何纠正它
PS.:我使用的是OS X El Capitan
g++ -c path/to/file.cpp
不是CCD_ 1而是CCD_。这意味着,以后为链接对象文件而调用的g++
无法找到这些文件。编辑您的Makefile
并将-o $@
添加到unionfind/QuickUnion.o
和unionfind/UnionFind.o
规则中。
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- C++ 中 dlsym 的未定义符号
- 仅在 MacOS 上析构函数的未定义符号
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 生成文件:体系结构x86_64的未定义符号
- libc++abi未定义符号:_ZTVN10__cxxabif120__si-class_type_infoE
- Xcode"体系结构x86_64的未定义符号"
- 体系结构x86_64的未定义符号:找不到原因
- SWIG链接器:未定义符号:_ZN2cv8fastFreeEPv(cv::fastFree(void*))
- 如何修复架构x86_64的未定义符号,Boost Asio 1.58
- 在Qt5上去静态库:架构的未定义符号x86_64:
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 监视 SDK 下的未定义符号"__Unwind_SjLj_Unregister"
- 使用 Boost/Python 的未定义符号 - 复杂
- 建筑x86_64的未定义符号:"vtkDebugLeaksManager::vtkDebugLeaksManager()",引用自: