gpt4 book ai didi

c++ - 运算符重载删除函数

转载 作者:行者123 更新时间:2023-11-30 00:50:42 25 4
gpt4 key购买 nike

所以我又回到了图形编程,我用作引用的书(Frank Luna 的 3D 游戏编程与 DirectX 11)使用不再支持的 xnamath.h。我已将其更改为使用 DirectXMath.h,似乎没有任何问题。但是,当我重载 ostream << 运算符以使用 XMVECTOR 时,似乎出现了问题。当我尝试使用 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;
}

我有一种感觉,我搞砸了运算符重载,但我现在并不确定。我在网上找不到任何类似的问题,但我希望我只是忽略了一些非常基本的问题。任何建议将不胜感激。

最佳答案

问题出在这一行:

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

改成

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

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

关于c++ - 运算符重载删除函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24215331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com