从‘std::wstring aka std::basic_string<wchar_t>’到非标量类型‘UString aka std::basic_string<char>

Posted

技术标签:

【中文标题】从‘std::wstring aka std::basic_string<wchar_t>’到非标量类型‘UString aka std::basic_string<char>’的转换【英文标题】:conversion from ‘std::wstring aka std::basic_string<wchar_t>’ to non-scalar type ‘UString aka std::basic_string<char>’从‘std::wstring aka std::basic_string<wchar_t>’到非标量类型‘UString aka std::basic_string<char>’的转换 【发布时间】:2016-04-05 16:15:17 【问题描述】:

你能告诉我这段代码有什么问题吗?关于如何修复的任何想法?

JNIEXPORT jstring JNICALL Java_COM_DEMO_TEST_SEND (JNIEnv
*env, jclass c, jstring param)
    const char* strParam = env->GetStringUTFChars(param, 0);
    UString data = s2ws(string(strParam));
    UString result = TEST::SEND(data);
    return env->NewStringUTF(ws2s(result).c_str());

我收到以下错误。

error: conversion from ‘std::wstring aka std::basic_string<wchar_t>’ to non-scalar type ‘UString aka std::basic_string<char>’ requested
  UString data = s2ws(string(strParam));

【问题讨论】:

#ifdef WIN32 typedef std::wstring UString; #else typedef std::string UString; #endif 然后你编译你的代码没有设置WIN32,检查你的项目设置。 我在 Linux 上编译它,就像这样 g++ -Wall -g -c -I /usr/lib/jvm/java-8-oracle/include -I /usr/lib/jvm/java-8-oracle/include/linux BridgePosAPI.cpp -o BridgePosAPI.o -std=c++11 如果它在 linux 中,Ustring 应该是什么? 您是否为 windows 目标进行交叉编译?否则我会忽略 Windows 特定的东西。 【参考方案1】:

实际上,这个错误非常好;您尝试使用std::string,但您有std::wstring,编译器不知道如何将一个转换为另一个。

它们都是std::basic_string 的特化,但这并不意味着它们可以互换。

【讨论】:

以上是关于从‘std::wstring aka std::basic_string<wchar_t>’到非标量类型‘UString aka std::basic_string<char>的主要内容,如果未能解决你的问题,请参考以下文章

从 std::string 和 std::wstring 获取 char 整数值

将 std::wstring 从 Visual Studio 移植到 mingw gcc

将 std::wstring 的内容从 C++ 返回到 C#

将 std::wstring 移植到 gcc cygwin

如何使用 PInvoke 将 std::wstring 从 C++ 返回到 C# 而无需编写字符串缓冲区转换 [重复]

如何可移植地将 std::wstring 写入文件?