operator overload删除函数

时间:2014-06-14 00:07:16

标签: c++ directx operator-overloading

所以我回到图形编程,我正在使用的书作为参考(Frank Luna的DirectX 11 3D游戏编程),使用不再支持的xnamath.h。我已将其更改为使用DirectXMath.h,看似没有任何问题。但是,当我重载ostream时,似乎有问题<<运算符与XMVECTORs一起使用。当我尝试使用cout打印XMVECTOR对象时,我收到此错误:

Error   1   error C2280: 'std::basic_ostream<char,std::char_traits<char>>::basic_ostream(const std::basic_ostream<char,std::char_traits<char>> &)' : attempting to reference a deleted function

此程序中只有一个文件(main.cpp):

#include <Windows.h>
#include <DirectXMath.h>
#include <iostream>

using namespace DirectX;
using namespace std;
// Overload the "<<" operators so that we can use cout to output XMVECTOR objects
ostream& operator<<(ostream os, FXMVECTOR v); 

int main() {
    cout.setf(ios_base::boolalpha);

        // Check support for SSE2 (Pentium4, AMD K8, and above
        if (!XMVerifyCPUSupport()) {
        cout << "DirectX Math not supported" << endl;
        return 0;
    }

    XMVECTOR n = XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f);
    XMVECTOR u = XMVectorSet(1.0f, 2.0f, 3.0f, 0.0f);
    XMVECTOR v = XMVectorSet(-2.0f, 1.0f, -3.0f, 0.0f);
    XMVECTOR w = XMVectorSet(0.707f, 0.707f, 0.0f, 0.0f);

    // Vector addition: XMVECTOR operator +
    XMVECTOR a = u + v;


    cout << a;
} 

ostream& operator<<(ostream os, FXMVECTOR v) {
    XMFLOAT3 dest;
    XMStoreFloat3(&dest, v);

    os << "(" << dest.x << ", " << dest.y << ", " << dest.z << ")";
    return os;
}

我有一种感觉我弄乱了操作员超载,但我现在还不确定。我在网上找不到任何类似的问题,但我希望我只是忽略了一些非常基本的东西。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:6)

问题出在这一行:

ostream& operator<<(ostream os, FXMVECTOR v) {

将其更改为

ostream& operator<<(ostream& os, FXMVECTOR v) {

第一行尝试使用复制构造函数制作ostream的副本。这是不允许的。