CPP перегрузка оператора. Хочу выводить XMVECTOR в текст. string + FXMVECTOR = LPCWSTR

Рейтинг: -2Ответов: 1Опубликовано: 11.08.2023

Есть вот такой код:

#include "stdafx.h"
#include "DirectXMath.h"
#include <Windows.h>
#include <string>
#include <sstream>

using namespace std;

void MyDirectXMath::CheckDXMath()
{
    XMVECTOR vector = XMVectorZero();

    LPCWSTR str = string("vector: ") + vector; // проблема здесь

    MessageBox(nullptr, str , L"VectorValue", MB_OK);

}

LPCWSTR XM_CALLCONV operator+ (string abc, FXMVECTOR fxmvec) {
    XMFLOAT3 vec;
    XMStoreFloat3(&vec, fxmvec);

    ostringstream ss{};
    ss << abc << " = { " << vec.x << ", " << vec.y << ", " << vec.z << " }";
    string str = ss.str();
    wstring wstr = wstring(str.begin(), str.end());
    return wstr.c_str();
}

Код ошибки : Ошибка C2678 бинарный "+": не найден оператор, принимающий левый операнд типа "std::string" (или приемлемое преобразование отсутствует)

Ответы

▲ 0

Так, я разобрался. Локальная переменная удалялась при выходе из функции. Рабочий вариант в моём случае выглядит так:

#include "stdafx.h"

#include "MyDirectXMath.h"
#include <string>
#include <sstream>

using namespace std;

// хранилище для итоговой строки
wchar_t chr[50]{};

LPCWSTR XM_CALLCONV operator+ (const wchar_t* abc, FXMVECTOR fxmvec) {
    XMFLOAT3 vec;
    XMStoreFloat3(&vec, fxmvec);

    //"очищаем" хранилище
    chr[0] = '\0';

    wstringstream ss{};
    
    ss << " = { " << vec.x << ", " << vec.y << ", " << vec.z << " }";

    wcscat_s(chr, abc);
    wcscat_s(chr, ss.str().c_str());
    return chr;
}

void MyDirectXMath::CheckDXMath()
{
    XMVECTOR vector = XMVectorZero();

    MessageBox(nullptr, L"ABC " + vector, L"VectorValue", MB_OK);
}

Спасибо всем кто комментировал.