此问题与在 Windows 10 操作系统中运行的 C++ 应用程序中 Visual Studio 2019 的编译器错误有关。这可能是一个中级或更高级别的问题。
我有这个功能:
template<typename T> T* Scene::GetComponent(EntityID entityID) {
CompTypeID typeID = TypeToID<T>();
if (HasComponent<T>(entityID)) {
CompIndex index = componentIndexes[typeID][entityID];
return components[typeID][index];
}
else return nullptr;
}
Run Code Online (Sandbox Code Playgroud)
此函数导致编译器错误 C2440:
'return':无法使用 [_Ty=Component*] 和 [T=Name] 从 '_Ty' 转换为 'T*'
此错误还附加了以下两条消息:
消息:从基类转换到派生类需要 dynamic_cast 或 static_cast
消息:请参阅对使用 [T=Name] 编译的函数模板实例化 'T *Scene::GetComponent(EntityID)' 的引用
此错误出现 3 次,每次 T 等于 Name、Transform 和 Sprite(到目前为止我的游戏引擎中的每个组件)
MSDN 上的编译器错误 C2440:https ://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2440?view = vs-2019
我的实体组件系统通过两个数组数组存储实体和组件。
第一个是componentIndexes,用于按实体索引到第二个数组中,第二个数组components将根据索引返回一个组件。从本质上讲,如果您听说过使用“稀疏”数组和“密集”数组来压缩数组,那么这 …
c++ components compiler-errors game-engine entity-component-system