小编You*_*Mop的帖子

我的游戏引擎实体组件系统中的 GetComponent<>() 函数返回编译器错误 C2440

此问题与在 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

功能说明

ECS设计

我的实体组件系统通过两个数组数组存储实体和组件。

第一个是componentIndexes,用于按实体索引到第二个数组中,第二个数组components将根据索引返回一个组件。从本质上讲,如果您听说过使用“稀疏”数组和“密集”数组来压缩数组,那么这 …

c++ components compiler-errors game-engine entity-component-system

2
推荐指数
1
解决办法
276
查看次数