gpt4 book ai didi

c++ - 为什么在使用此基本继承设置时会出现链接器错误?

转载 作者:行者123 更新时间:2023-11-28 06:21:17 26 4
gpt4 key购买 nike

这可能是一个很简单的问题,但我不知道如何解决它。我的 C++ 类设置如下:

MappingTechnique.h

struct MappingTechnique {
virtual void processFrame();
};

struct SimpleGreedyMappingTechnique : MappingTechnique {
void processFrame();
};

MappingTechnique.cpp

#include "MappingTechnique.h"

void SimpleGreedyMappingTechnique::processFrame() {

}

但是,当我构建(使用 CMake)时,出现以下错误:

Linking CXX executable PayloadRegionMapper
Undefined symbols for architecture x86_64:
"typeinfo for MappingTechnique", referenced from:
typeinfo for SimpleGreedyMappingTechnique in MappingTechnique.cpp.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[3]: *** [PayloadRegionMapper] Error 1
make[2]: *** [CMakeFiles/PayloadRegionMapper.dir/all] Error 2
make[1]: *** [CMakeFiles/PayloadRegionMapper.dir/rule] Error 2
make: *** [PayloadRegionMapper] Error 2

我不明白这里有什么问题?为什么不能在子类中实现父类(super class)的virtual方法?谁能帮我解决这个问题?

最佳答案

好的,感谢@Sneftel 的评论,我自己找到了解决方案,指出我没有将其声明为 虚拟的,也没有给它定义。

在谷歌搜索这意味着什么之后,我想到了以下选项:

给它一个定义:

struct MappingTechnique {
virtual void processFrame() {};
};

让它纯净:

struct MappingTechnique {
virtual void processFrame() = 0;
};

我决定让它变得纯粹,唯一需要注意的是当使用抽象类时(并且还不知道它将用哪个实际子类初始化),你需要使用:

MappingTechnique *mappingTechnique 而不是 MappingTechnique mappingTechnique

(当您考虑时这是合乎逻辑的,但对于 C++ 新手来说可能不是那么明显)。感谢@Sneftel!

关于c++ - 为什么在使用此基本继承设置时会出现链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29274090/

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