【发布时间】:2017-03-03 01:30:12
【问题描述】:
我正在尝试将库 simplexlsxwriter 与 Qt 一起使用,但是当我尝试编译时,我在代码中的多个位置遇到了以下错误:
“无法将参数 '1' 的 'const TCHAR* {aka const wchar_t*}' 转换为 'const char*' 到 'size_t strlen(const char*)'”
有问题的行是:
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 个问题)。我在Qt下使用mingw53_32。
这很奇怪,因为当我创建一个简单的 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 $@ $^ $(LDFLAGS)
main: $(object)
-include $(src:.cpp=.d)
编译没有遇到任何困难,我获得了所需的二进制文件。所以我的问题是,为什么使用 Qt 从 const wchar_t* 到 const char* 的转换会在使用“原始”mingw 编译器时抛出错误,它不会抛出任何错误?
【问题讨论】:
-
有一些函数可以实际转换底层数据,但不能只在二进制级别不同的事物之间重新解释转换。
-
我不应该在这个问题中添加 reinterpret_cast 的东西,因为它更关注原因,为什么从
const wchar_t*到const char*的转换不会使用 mingw32 引发任何错误(使用 gcc 版本5.3) 但是当我使用 Qt 使用相同的编译器时会引发错误? -
@SchneiderLoïc:Qt 是一条红鲱鱼。它只是一个图书馆。您很可能还有其他编译器标志。