2016-11-16 3 views
0

Итак, я пытаюсь работать над программированием простой камеры, чтобы использовать пользовательский ввод для перемещения по игровому миру, когда я столкнулся с некоторыми действительно странными ошибками, связанными с оператором (C2677 & C2678). Они из линийОшибка сопоставления оператора VS2015

camPosition += moveLeftRight * camRight; 
    camPosition += moveBackForward * camForward; 
    camTarget = camPosition + camTarget; 

Определения:

float moveLeftRight = 0.0f; 
    float moveBackForward = 0.0f; 

    DirectX::XMVECTOR camPosition; 
    DirectX::XMVECTOR camTarget; 

    DirectX::XMVECTOR camForward = DirectX::XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f); 
    DirectX::XMVECTOR camRight = DirectX::XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f); 

И ошибки чтения:

Error C2677 binary '*': no global operator found which takes type 'DirectX::XMVECTOR' (or there is no acceptable conversion) 
    //Hovering "operand types are: float * DirectX::XMVECTOR" 

    Error C2678 binary '+': no operator found which takes a left-hand operand of type 'DirectX::XMVECTOR' (or there is no acceptable conversion) 
    //Hovering "operand types are: DirectX::XMVECTOR * DirectX::XMVECTOR" 

Он составил раньше. Он отлично компилировался, когда я использовал пространство имен DirectX. Я подумал, что, возможно, что-то испортилось, когда я добавил код движения. Я удалил пространство имен и добавил DirectX :: к каждому определению и функции. Ошибка. Страница MSDN для C2677 и C2678 не помогла. Googlings только дал мне простые вещи.

Gyazo ссылки:

https://gyazo.com/e2f62026d00e8fa82142b24de3fe32b5 https://gyazo.com/f1bbc321abc3a167d519bf1d671edcc6

Edit: я понятия не имею, почему или как, но он работает сейчас. Так что я ... У меня час моего времени. >.> Черт возьми, это кодирование ... lol.

ответ

0

Вы хотели бы использовать этот оператор:

XMVECTOR XM_CALLCONV  operator+ (FXMVECTOR V1, FXMVECTOR V2); 

Я думаю, что вы скрыли это как-то вроде этого:

namespace 
{ 
    class Scalar { 
    public: 
     Scalar() {} 
    }; 

    inline Scalar operator+ (Scalar s1, Scalar s2) { return Scalar(); } 

    int f() { 
     XMVECTOR a; 
     a = a + a; // Here, you can't access XMVECTOR's operator, 
        // because name lookup stops with first operator found 
    } 
} 
Смежные вопросы