簡體   English   中英

錯誤:{}中的'199'從'int'到'char'的轉換變窄

[英]error: narrowing conversion of ‘199’ from ‘int’ to ‘char’ inside { } [-Wnarrowing]

我試圖在linux debian 9.5中編譯一個非常老的軟件,但我不斷收到此錯誤:

janpdf/PDF.cpp: In member function ‘void PDF::OpenFile(const char*)’:
janpdf/PDF.cpp:41:74: error: narrowing conversion of ‘199’ from ‘int’ to 
‘char’ inside { } [-Wnarrowing]
char signature[] = {'%', '%', 'G' + 128, 'R' + 128, 'A' + 128, '\n', 0};
                                                                      ^
janpdf/PDF.cpp:41:74: error: narrowing conversion of ‘210’ from ‘int’ to 
‘char’ inside { } [-Wnarrowing]
janpdf/PDF.cpp:41:74: error: narrowing conversion of ‘193’ from ‘int’ to 
‘char’ inside { } [-Wnarrowing]
Makefile:153: recipe for target 'janpdf/PDF.o' failed
make: *** [janpdf/PDF.o] Error 1

我已經嘗試過簽名/未簽名的“ char”方法。 盡管我對almos不了解,但對編碼一無所知,這是我找到的唯一答案。 任何其他解決方案都歡迎。 謝謝

好吧,顯然在您的實現中,像210199這樣的值不適合char類型的范圍。 因此,轉換范圍正在縮小。 {}初始化程序不允許縮小轉換范圍。

這表明您的實現顯然使用了帶符號的char類型。

您可以使用{}內的顯式強制轉換將值強制轉換為char 您可以停止使用{}初始化程序。 您可以強制實現使用unsigned char 有許多解決此問題的“解決方案”,但是沒有更多上下文就無法選擇。

如果該代碼最初是為您現在正在編譯的同一“實現系列”編寫的,則很可能是為該語言的較舊版本編寫的,該版本隱式地執行了縮小轉換。 在這種情況下,要重現舊的行為,則需要顯式強制轉換

char signature[] = 
  {'%', '%', (char) ('G' + 128), (char) ('R' + 128), (char) ('A' + 128), '\n', 0};

進行構建的最省力的方法可能是在編譯器調用中添加-Wno-narrowing 如果您使用的是make ,則可以使用CFLAGS=-Wno-narrowing make (假設您正在使用bash)之類的東西開始,以獲得所需的效果。

當前的編譯器默認使用較新版本的C ++。 您的編譯器可能正在嘗試以C ++ 11或C ++ 14模式編譯源代碼。

嘗試將-std=c++03添加到編譯器標志中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM