2016-11-16 88 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 ::添加到了每個定義和函數中。錯誤。 C2677和C2678的MSDN頁面根本沒有任何幫助。 Google只給了我簡單的東西。

Gyazo鏈接:

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

編輯:我不知道爲什麼或者怎麼樣,但是現在的工作。所以,耶...我有一個小時的時間。 >。該死的編碼...大聲笑。

回答

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 
    } 
}