【问题标题】: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 特定的东西。

标签: c++ c++11 stl


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 2015-04-28
    • 2020-02-03
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    相关资源
    最近更新 更多