从‘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#