-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 に答える