Я пытаюсь использовать библиотеку 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-компилятора, не вызывает никакой ошибки?
Существуют функции, позволяющие фактически преобразовывать базовые данные, но вы не можете просто переинтерпретировать_картирование между вещами, которые различаются на двоичном уровне. –
Мне не следовало добавлять тему reinterpret_cast в этот вопрос, поскольку она больше сфокусирована на причине, почему преобразование из 'const wchar_t *' в 'const char *' не вызывает никакой ошибки с помощью mingw32 (с gcc версии 5.3), но он бросает ошибку, когда я использую тот же самый самый компилятор с помощью Qt? –
@ SchneiderLoïc: Qt - красная селедка. Это просто библиотека. Скорее всего, у вас есть другие флаги компилятора. – MSalters