我在以下几行代码中重现了我在一个更大的项目中所经历的行为.我遗漏了#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 $@ $^

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐