-1

我在编译时有错误

INLINE template<typename T> T *&Animation::GetKey(int subAnim, int node, int frameInSubAnim)
{
    const int keyIndex = GetKeyIndex(subAnim, node, frameInSubAnim);
    return static_cast<T*>(m_Keys[keyIndex]);
}

出现以下错误

d:\before_me\motion\pipeline\animation\AnimationData.inl(98): 
error C2440: 'return' : cannot convert from 'Motion::Animation::Key *' to 'Motion::Animation::Key *&'

以及我该如何解决?

4

2 回答 2

3

编译器告诉您static_cast<T*>(...)生成一个临时的(右值)并且不能被非常量引用绑定(返回类型是T*&)。请注意,即使它会绑定到T*const&您也不是真的想要那样。

目前尚不清楚您要达到的目标,但请考虑返回T*(删除参考)。

于 2012-11-01T19:37:52.257 回答
2

我认为这捕获了您想要的内容并提供了一个可怕的解决方法

void* m_keys[] = { 0, 0, 0 };

template<typename T>
T*& foo(const int index)
{
    return *reinterpret_cast<T**>(&m_keys[index]);
}

int main()
{
 foo<int>(0) = new int();
}
于 2012-11-01T20:09:54.533 回答