我无法使用 wcout 输出字符串

I can't output a string with wcout

这是 this question 的一种重复。我遵循了建议(我认为)并包含了 <string> 但我的脸上出现了完全相同的错误:

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)

#include <string>
#include <iostream>

using namespace std;

int main() {
    string texte;
    texte = "pouet";
    wcout << texte << endl;
    return 0;
}

编辑:我一点也不自豪地说这个问题是由于我没有选择正确的项目作为 "starting project"。 Visual Studio 有点难以理解……然而,最初真正的问题是关于我的实际项目,并且是关于无法通过 wcout 输出的标准字符串。我重新格式化了问题以相应地重新定位主题。喜欢就给我投反对票吧,我活该...

如果你使用 wcout 你也必须使用 wstring 并且你必须在你的 const 字符串前面放一个 'L'。

wstring texte;
texte = L"pouet";
wcout << texte << endl;

这在我的带有最新 MinGW 的 CLion 上编译和运行良好

#include <string>
#include <iostream>

using namespace std;

int main() {
    string texte;
    texte = "pouet";
    cout << texte << endl;
    return 0;
}

对于 wcout,又名宽字符串,这应该提供正确的输出:

#include <string>
#include <iostream>

using namespace std;

int main() {
    wstring texte;
    texte = L"pouet";
    wcout << texte << endl;
    return 0;
}

cout 输出 'regular' 个字符为 1 个字节宽的字符串(通常是 ASCII),而 wcout 输出 'wide' 个字符组成的字符串,这些字符的表示占用超过 1 个字节。

你嫁给字符串类型了吗?您可以通过将 texte 设为 char* 而不是字符串来完成您想做的事情:

char* texte = "pouet";

std::basic_string 输出运算符未重载以对流的任意字符类型进行运算。您的选择是:

  • 从您的 std::string 创建一个 std::wstring,例如:

    std::wcout << std::wstring(texte.begin(), texte.end());
    
  • 由于 C 风格字符串的输出运算符重载,即使字符类型不匹配,您也可以获得字符数组:

    std::wcout << texte.c_str();