2016-10-20 6 views
0

Я пытаюсь использовать библиотеку simplexlsxwriter с Qt, однако, когда я пытаюсь скомпилировать я встретил следующее сообщение об ошибке на нескольких месте в коде:Преобразование между сопзЬ wchar_t * и сопзЬ символ *, не допускается использование Qt

"не может преобразовать 'сопзЬ TCHAR * {ака Const wchar_t *}' на 'сопзЬ символ *' для аргумента '1' до 'size_t STRLEN (Const символ *)'"

линия в вопросе:

bool HasZipSuffix(const TCHAR *fn) { 
    const TCHAR *ext = fn+_tcslen(fn); 
} 

Для того, чтобы устранить эту ошибку, я попробовал следующее:

bool HasZipSuffix(const TCHAR *fn) { 
    const char* fn_cc = reinterpret_cast<const char*> (fn); 
    const TCHAR *ext = fn+_tcslen(fn_cc); 
} 

Он работает, однако он вводит множество ошибок (около 3720 вопросов) во время компиляций. Я использую mingw53_32 под Qt.

Это очень странно, так как, когда я создать простой Makefile следующим образом:

ROOT_DIR := ./ 

CXXFLAGS=-MMD -MP -Wall 
CXXFLAGS+= -I$(ROOT_DIR) 

src = Zip/zip.cpp \ 
    Xlsx/Chartsheet.cpp \ 
    Xlsx/Workbook.cpp \ 
    Xlsx/Worksheet.cpp \ 
    Xlsx/XlsxHeaders.cpp \ 
    main.cpp 

includes = Zip/zip.h \ 
    tchar.h \ 
    Xlsx/Chartsheet.h \ 
    Xlsx/SimpleXlsxDef.h \ 
    Xlsx/Workbook.h \ 
    Xlsx/Worksheet.h \ 
    Xlsx/XlsxHeaders.h 

object=$(src:.cpp=.o) 

%: %.o 
    $(LINK.cpp) -o [email protected] $^ $(LDFLAGS) 

main: $(object) 

-include $(src:.cpp=.d) 

Компиляция столкнулись абсолютно никаких трудностей, и я получить желаемый двоичную. Поэтому мой вопрос заключается в том, почему использование Qt преобразования из const wchar_t * в const char * выдает ошибку при использовании «raw» mingw-компилятора, не вызывает никакой ошибки?

+1

Существуют функции, позволяющие фактически преобразовывать базовые данные, но вы не можете просто переинтерпретировать_картирование между вещами, которые различаются на двоичном уровне. –

+0

Мне не следовало добавлять тему reinterpret_cast в этот вопрос, поскольку она больше сфокусирована на причине, почему преобразование из 'const wchar_t *' в 'const char *' не вызывает никакой ошибки с помощью mingw32 (с gcc версии 5.3), но он бросает ошибку, когда я использую тот же самый самый компилятор с помощью Qt? –

+0

@ SchneiderLoïc: Qt - красная селедка. Это просто библиотека. Скорее всего, у вас есть другие флаги компилятора. – MSalters

ответ

-1

Просто добавьте

DEFINES -= UNICODE 

в файл .pro . qmake по умолчанию определяет -DUNICODE, который сталкивается с win32 библиотеки.

 Смежные вопросы

  • Нет связанных вопросов^_^