gpt4 book ai didi

c++ - 继承时体系结构 x86_64 的 undefined symbol

转载 作者:行者123 更新时间:2023-11-30 05:29:56 24 4
gpt4 key购买 nike

我有一个 C++ 代码,我在其中尝试使用继承来重用我的代码。但是当我编写代码时出现以下错误:

Undefined symbols for architecture x86_64: "QuickUnion::QuickUnion(int)", referenced from: _main in main.o ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

make: *** [a.out] Error 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();
}

也许与构造函数有关,但我不知道为什么会发生此错误,也不知道如何更正它。

附言:我使用的是 OS X El Capitan。

最佳答案

命令的默认输出文件

g++ -c path/to/file.cpp

不是path/to/file.o而是./file.o。这意味着,稍后调用 g++ 链接目标文件无法找到这些文件。编辑您的 Makefile 并将 -o $@ 添加到 unionfind/QuickUnion.ounionfind/UnionFind.o 规则.

关于c++ - 继承时体系结构 x86_64 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36233784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com