因此,当我遇到一些非常奇怪的操作员匹配错误(C2677& C2678)时,我正在努力编写一个简单的相机来使用用户输入在游戏世界中移动。 他们来自
行 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页面根本没有帮助。谷歌搜索只给了我简单的东西。
Gyazo链接:
https://gyazo.com/e2f62026d00e8fa82142b24de3fe32b5 https://gyazo.com/f1bbc321abc3a167d519bf1d671edcc6
编辑:我不知道为什么或如何,但它现在有效。所以,我的时间已经过去了一个小时。 >>该死的编码...哈哈。
答案 0 :(得分: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
}
}