png ++无效模板参数Eclipse编辑器Cygwin符号链接

时间:2015-02-08 20:01:42

标签: c++ gcc cygwin png eclipse-cdt

我正在尝试将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) '

所以它似乎根本没有解决这种类型。可能导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

事实证明,这实际上并不是Eclipse解析的错误,而是与Cygwin样式符号链接不兼容。在png ++的png.hpptypes.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.hlibpng16/png.h

中将包含路径从png.hpp更改为types.hpp

现在,在右键单击项目后,eclipse中的所有内容都能正确解析 - &gt; index - &gt; 重建。或者,您可以使用windows mklink命令将/ usr / include中的png.hpngconf.hpnglibconf.h符号链接到相应的libpng子文件夹,并删除Cygwin样式符号链接。

如果有人知道Eclipse与Cygwin符号链接无缝协作的方法,那么请在此处发布,我会接受这个答案,因为显然这比这个hacky修复要好一些。

感谢大家的评论,但幸好感谢这次它不是Eclipse问题。