对[class::function]的未定义引用/对[class]的typeinfo的未定义参考
undefined reference to [class::function] / undefined reference to typeinfo for [class]
我有一个由3个纯虚拟函数定义的基类:
class Baseclass
{
public:
virtual ~Baseclass() {};
virtual void getSomething(std::vector<uint8_t>& something) const = 0;
virtual uint8_t classLength() const = 0;
}
从中我衍生出另外两个类
class DerivedA : public Baseclass
{
public:
DerivedA();
~DerivedA();
bool setParamA(const std::vector<uint8_t> value);
bool setParamB(const std::vector<uint8_t> value);
void getSomething(std::vector<uint8_t>& something) const;
uint8_t classLength() const;
private:
uint8_t mParamA;
uint8_t mParamB;
}
第二类与第一类类似。
这对我的单元测试非常适用(常规分配,无指针)。
现在,我尝试将其集成到我的代码的其余部分中(它被编译为一个库),如下所示:
std::shared_ptr<Baseclass> object;
object = std::make_shared<DerivedA>(); // 1
std::dynamic_pointer_cast<DerivedA>(object)->setParamA(...) // 2
编译进行得很完美,但链接会出现以下错误:
对[class]的typeinfo的未定义引用(第1行)
对[class::function]的未定义引用(第2行)
在这个命令上
g++-4.7 -o ../Deliv/GnuDebug/ClassesTest ../Deliv/GnuDebug/buildsupport/cppunit/mainCB.o -pthread ../../../../../../3rdparty/libcppunit/obj/native-gcc/libcppunit/src/cppunit/.libs/libcppunit.a ../../../Classes/Deliv/GnuDebug/libClasses.a
另一件奇怪的事情是,它只为其中一个派生类产生这个错误,并且其中一个衍生类在上面的构造中为shared_ptr 的分配工作
我不知道这里可能出了什么问题,如果有人能给我指明正确的方向,我将永远感激
使用解决方案编辑:
我找到了我的问题的解决方案,以便进一步参考:
设置:
Baseobject, DerivedA, DerivedB -> libObjects.a
Functionality using DerivedA, DerivedB -> libFunctionality.a
TestFunctionality using Functionality -> Error
问题:
链接器在知道libObjects之前就试图链接到libFunctional,因此出现错误。
解决方案:
更改库链接的顺序。
奇怪的行为:
我只犯了DerivedA的错误,没有犯DerivedB。如果我使用DerivedA注释掉代码,那么TestFunctionality将编译并运行时不会出现错误
有人知道为什么会这样吗?
有人能验证我的解释是否正确吗?也许可以给我指一些解释这个问题的文章?
您必须实现函数bool DerivedA::setParamA(const std::vector<uint8_t> value);
,而不仅仅是声明它。
相关文章:
- VSCode - C++对"CLASS::FUNCTION"的未定义引用
- 对 Class::Class() 和函数在一个文件中的未定义引用? c++
- 在 C++ 中对"Class::function()"错误的未定义引用 [CLion IDE]
- 对"Class::StaticStructMember"的未定义引用
- 对 Class::Class/Function 的未定义引用(OOP 中的初学者)
- 对"typeinfo for <class>"的未定义引用
- 对'vtable for class'的未定义引用
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 解决方法:未定义对"class::function"的引用
- C++:对 class::function() 的未定义引用
- 奇怪的错误:未定义对"class::class()"的引用
- 对 class::function 的未定义引用
- Qt 5 C++ 对 Class::function(QString, Qstring, ..) 的未定义引用
- 对[class::function]的未定义引用/对[class]的typeinfo的未定义参考
- 对'Class::Class(function)'的未定义引用
- cpp 未定义对"class::method"的引用
- 对 CLASS::function() 的未定义引用
- C++ 错误:标识符'class name'未定义
- G++ 未定义对 class::function 的引用
- 在参数中接受 2 个类的友元函数 - 未定义'Class'