gpt4 book ai didi

c++ - 链接时奇怪的 undefined reference

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:18 26 4
gpt4 key购买 nike

我在以下几行代码中重现了我在一个更大的项目中遇到的行为。我省略了 #ifndef 守卫和 #include 指令以提高可读性。链接器错误是在调用 make 时产生的。 makefile 包含在问题的末尾。

C 类继承自 B,B 继承自 A。O 是一个完全不同的类。

链接器提示:

g++ -o main main.cpp -L. -lABC -lO
./libO.a(O.o): In function `O::foo(A)':
O.cpp:(.text+0x1f): undefined reference to `C::C(A const&)'

这是源代码。我试图让它尽可能小和可读。知道问题出在哪里吗?

/***** A.h *****/
class A
{
public:
A();
A(const A& a);
};

/***** A.cpp *****/
A::A() {}
A::A(const A& a) {}

/****** BC.h *******/
class B : public A
{
public:
B(const A& a);
};

class C : public B
{
public:
C(const A& a);
};

/******* BC.cpp ********/
B::B(const A& a) : A(a) {}
C::C(const A& a) : B(a) {}

/***** O.h *****/
class O
{
public:
void foo(A a);
};

/***** O.cpp *****/
void O::foo(A a)
{
C c(a);
}

主要内容:

/******* main.cpp *******/
int main()
{
A a;
O o;
o.foo(a);
return 0;
}

这是生成文件:

%.o: %.cpp %.h
g++ -c $<

.PHONY: all
all: mklibs main

main: main.cpp
g++ -o $@ main.cpp -L. -lABC -lO

mklibs: libABC.a libO.a

libABC.a: A.o BC.o
ar -r $@ $^

libO.a: O.o
ar -r $@ $^

最佳答案

有时链接顺序很重要,试试-lO -lABC

关于c++ - 链接时奇怪的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960874/

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