c语言编程显示未定义的引用,c – 链接时奇怪的未定义引用
我在以下几行代码中重现了我在一个更大的项目中所经历的行为.我遗漏了#ifndef守卫和#include指令,试图提高可读性.调用make时会产生链接器错误. makefile包含在问题的末尾.C类继承自B的继承自A的O.O是完全不同的类.链接器抱怨:g++ -o main main.cpp -L. -lABC -lO./libO.a(O.o): In function `O::foo(A)':O.
我在以下几行代码中重现了我在一个更大的项目中所经历的行为.我遗漏了#ifndef守卫和#include指令,试图提高可读性.调用make时会产生链接器错误. makefile包含在问题的末尾.
C类继承自B的继承自A的O.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;
}
这是makefile:
%.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 $@ $^
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)