2016-10-20 64 views
0

我想利用圖書館simplexlsxwriter使用Qt,但是當我嘗試編譯我的代碼在幾個地方遇到了以下錯誤不允許「不能轉換 'const的TCHAR * {又名常量爲wchar_t *}' 到 '常量字符*' 的參數 '1' 到 '爲size_t的strlen(常量字符*)'」轉換,用qt

所討論的行是:

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 [email protected] $^ $(LDFLAGS) 

main: $(object) 

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

編譯遇到絕對沒有困難,我獲得所需的二進制文件。所以我的問題是,爲什麼使用Qt從常量wchar_t *轉換爲const char *在使用「原始」mingw編譯器時拋出錯誤,它不會拋出任何錯誤?

+1

有一些函數可以實際轉換底層數據,但不能在二進制級別的不同事物之間重新進行reinterpret_cast。 –

+0

我不應該在這個問題中添加reinterpret_cast事物,因爲它更關注於原因,爲什麼使用mingw32(使用gcc版本5.3)從'const wchar_t *'轉換爲'const char *'不會引發任何錯誤,但是當我使用相同的使用Qt的編譯器時,它會拋出一個錯誤? –

+0

@SchneiderLoïc:Qt是一種紅鯡魚。這只是一個圖書館。最有可能的是,你有其他編譯器標誌。 – MSalters

回答

-1

只需添加

DEFINES -= UNICODE 

的.pro文件。 qmake默認定義爲-DUNICODE,它與win32庫衝突。