我正在尝试将Eclipse CDT与Cygwin GCC工具链一起使用,以便使用png ++读取一些图像。我已经在我的Cygwin中安装了png ++标题(我尝试了0.2.5和0.2.7),并且使用make的外部构建器设置编译得很好,但由于某些原因,编辑器强调了#34; image"来自png :: image的非常简单的代码:
#include <png++/png.hpp>
int main( int argc, char* argv[]){
png::image<png::gray_pixel> t(128,128);
return 1;
}
并给出错误:
模板参数无效。
我看了一下这个错误,对于其他人来说,这似乎是因为没有GCC设置使用C ++ 11(例如Invalid template arguments on map std::map< std::string, Stock*> &stocks),但我不认为这是一个问题,因为我有我的&#34; CDT GCC内置编译器设置Cygwin&#34; provider命令设置为:
${COMMAND} ${FLAGS} -E -P -v -dD -std=c++11 "${INPUTS}"
行std::normal_distribution<double> distribution(5.0,2.0);
不会出错。
我可以通过关闭&#34;无效模板参数&#34;来删除错误下划线。在项目属性下 - &gt; C / C ++一般 - &gt; 代码分析,但问题比这更深,因为没有一个自动完成适用于png :: image类型的对象,如果我尝试在函数中使用它,例如:
void pngTest(png::image<png::gray_pixel> im, int other) {}
它会出错:Invalid arguments ' Candidates are: void pngTest(?, int) '
所以它似乎根本没有解决这种类型。可能导致这种情况的原因是什么?
答案 0 :(得分:0)
事实证明,这实际上并不是Eclipse解析的错误,而是与Cygwin样式符号链接不兼容。在png ++的png.hpp
和types.hpp
中,它包含来自libpng的png.h
,但在Cygwin中,png.h(在/ usr / include中)是一个Cygwin样式的符号链接。当前的libpng(在我的例子中,该文件包含文本:!<symlink>libpng16/png.h
)。
所以Eclipse无法解决这个问题,即使Cygwin的GCC可以,而且它使得types.hpp中的typedef无法正确解析。这就是为什么我在eclipse中遇到invalid template arguments
错误,png::gray_pixel
不是有效类型。当我放<int>
而不再出错时,我注意到了这一点。这就是问题所在。
我在png.h
和libpng16/png.h
png.hpp
更改为types.hpp
现在,在右键单击项目后,eclipse中的所有内容都能正确解析 - &gt; index - &gt; 重建。或者,您可以使用windows mklink命令将/ usr / include中的png.h
,pngconf.h
和pnglibconf.h
符号链接到相应的libpng子文件夹,并删除Cygwin样式符号链接。
如果有人知道Eclipse与Cygwin符号链接无缝协作的方法,那么请在此处发布,我会接受这个答案,因为显然这比这个hacky修复要好一些。
感谢大家的评论,但幸好感谢这次它不是Eclipse问题。