繁体   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