2017-01-17 7 views
-3

Его было трудно найти объяснение онлайн по синтаксису ниже и искать L "" на этих форумах не дает никаких результатов. Я внутри Qt5 отлаживаю приложение, которое слишком длинное, чтобы вставить здесь. Я пытаюсь решить эту последнюю ошибку, которая указывает на строку кода, содержащую -> return L ""; < -. Его одна из последних строк в приведенной ниже функции. Ошибка компилятора я получаю это ...Никогда не видел этот синтаксис раньше, может кто-то объяснить ..... return L ""

C2440: «возвращение»: не удается преобразовать из 'сопзЬ wchar_t [1] для

Мой первый вопрос «LPWSTR» является то, что это значит - -> L "" < -?

Наконец, как я могу устранить эту ошибку компилятора?

LPWSTR ImageThread::getLastErrorString(DWORD lastError) 
    { 
     DWORD result = FormatMessage(
      FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 
      NULL, 
      lastError, 
      LANG_USER_DEFAULT, 
      errorString, 
      sizeof(errorString), 
      NULL); 
     if (result > 0) 
     { 
      return errorString; 
     } 
     else 
     { 
      return L""; 
     } 
    } 

Мое предположение, потому что wchar_t [1] является 1 байт и LPWSTR 2 байта это не в состоянии преобразовать ??? Я не уверен, что это важно, но я получаю еще одну ошибку на панели инструментов Qt5, говоря «Ошибка: не удалось декодировать« myfile.cpp »с кодировкой« UTF-8 ». Редактирование невозможно». Это дает мне возможность выбрать кодировку. Я уверен, что это связано с тем, что этот код был написан с более старой версией Qt, и теперь, потому что я перестраиваю весь этот код с Qt5, произошли некоторые изменения. Опять же, я не уверен, что это касается моих двух вопросов выше, но я хотел нарисовать полную картину того, что происходит.

+0

_searching для L "" на этих форумах не дает никаких результатов_ SO is ** not ** a forum! Обновление: _Мое предположение состоит в том, что wchar_t [1] - 1 байт, а LPWSTR - 2 байта, который он не может преобразовать. Как вы сделали вывод, что 'wchar_t [1]' - один байт? Или 'LPWSTR' составляет 2 байта? В общем, компилятор жалуется на 'L '' '' '' 'const', в то время как ваша функция возвращает значение, отличное от 'const'. –

+0

http://stackoverflow.com/questions/6384118/what-does-the-l-in-front-a-string-mean-in-c – AlexanderVX

+1

Я ничего не могу сказать об ошибке, но вы можете прочитать о строковые литеральные префиксы, такие как 'L" "здесь: http://en.cppreference.com/w/cpp/language/string_literal – HolyBlackCat

ответ

2

«L» (или «l», хотя большинство рекомендуют против него, из-за того, насколько оно выглядит как 1) перед строковым литералом (или символьным литералом) делает его «широким» литералом, так что это содержит wchar_t вместо char, а его адрес wchar_t * вместо char *.

В стандартах на C и C++ не указаны точно, что такое широкие символы. В Windows обычно будет 16 бит, представляющих строку в UTF-16. В большинстве Unix-подобных систем они обычно будут 32 бит, представляя строку в UCS-4.

В этом конкретном случае "" после L означает, что он просто возвращает пустую строку.