C++ 在Ubuntu 14.04上使用icpc编译Qt时出现编译错误

C++ 在Ubuntu 14.04上使用icpc编译Qt时出现编译错误,c++,qt,compiler-errors,ubuntu-14.04,icc,C++,Qt,Compiler Errors,Ubuntu 14.04,Icc,我试图在Ubuntu 14.04上使用Intel icpc编译Qt,但在这个文件上出现编译错误-qpnghandler.cpp 从我的qpnghandler.cpp文件中,这是相关代码- static void setup_qt(QImage& image, png_structp png_ptr, png_infop info_ptr, float screen_gamma=0.0) { if (screen_gamma != 0.0 && png_get_vali

我试图在Ubuntu 14.04上使用Intel icpc编译Qt,但在这个文件上出现编译错误-qpnghandler.cpp

从我的qpnghandler.cpp文件中,这是相关代码-

static
void setup_qt(QImage& image, png_structp png_ptr, png_infop info_ptr, float screen_gamma=0.0)
{
  if (screen_gamma != 0.0 && png_get_valid(png_ptr, info_ptr, PNG_INFO_gAMA)) {
    double file_gamma;
    png_get_gAMA(png_ptr, info_ptr, &file_gamma);
    png_set_gamma(png_ptr, screen_gamma, file_gamma);
}

png_uint_32 width;
png_uint_32 height;
int bit_depth;
int color_type;
png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, 0, 0, 0);

if (color_type == PNG_COLOR_TYPE_GRAY) {
    // Black & White or 8-bit grayscale
    if (bit_depth == 1 && info_ptr->channels == 1) {
        png_set_invert_mono(png_ptr);
        png_read_update_info(png_ptr, info_ptr);
        if (image.size() != QSize(width, height) || image.format() != QImage::Format_Mono) {
            image = QImage(width, height, QImage::Format_Mono);
            if (image.isNull())
                return;
        }
        image.setColorCount(2);
        image.setColor(1, qRgb(0,0,0));
        image.setColor(0, qRgb(255,255,255));
    } else if (bit_depth == 16 && png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
        png_set_expand(png_ptr);
        png_set_strip_16(png_ptr);
        png_set_gray_to_rgb(png_ptr);
        if (image.size() != QSize(width, height) || image.format() != QImage::Format_ARGB32) {
            image = QImage(width, height, QImage::Format_ARGB32);
            if (image.isNull())
                return;
        }
        if (QSysInfo::ByteOrder == QSysInfo::BigEndian)
            png_set_swap_alpha(png_ptr);

        png_read_update_info(png_ptr, info_ptr);
    } else {
        if (bit_depth == 16)
            png_set_strip_16(png_ptr);
        else if (bit_depth < 8)
            png_set_packing(png_ptr);
        int ncols = bit_depth < 8 ? 1 << bit_depth : 256;
        png_read_update_info(png_ptr, info_ptr);
        if (image.size() != QSize(width, height) || image.format() != QImage::Format_Indexed8) {
            image = QImage(width, height, QImage::Format_Indexed8);
            if (image.isNull())
                return;
        }
        image.setColorCount(ncols);
        for (int i=0; i<ncols; i++) {
            int c = i*255/(ncols-1);
            image.setColor(i, qRgba(c,c,c,0xff));
        }
        if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
#if PNG_LIBPNG_VER_MAJOR < 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR < 4)
            const int g = info_ptr->trans_values.gray;
#else
            const int g = info_ptr->trans_color.gray;
#endif
            if (g < ncols) {
                image.setColor(g, 0);
            }
        }
    }
} else if (color_type == PNG_COLOR_TYPE_PALETTE
           && png_get_valid(png_ptr, info_ptr, PNG_INFO_PLTE)
           && info_ptr->num_palette <= 256)
{
    // 1-bit and 8-bit color
    if (bit_depth != 1)
        png_set_packing(png_ptr);
    png_read_update_info(png_ptr, info_ptr);
    png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, 0, 0, 0);
    QImage::Format format = bit_depth == 1 ? QImage::Format_Mono : QImage::Format_Indexed8;
    if (image.size() != QSize(width, height) || image.format() != format) {
        image = QImage(width, height, format);
        if (image.isNull())
            return;
    }
    image.setColorCount(info_ptr->num_palette);
    int i = 0;
    if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
        while (i < info_ptr->num_trans) {
            image.setColor(i, qRgba(
                info_ptr->palette[i].red,
                info_ptr->palette[i].green,
                info_ptr->palette[i].blue,
 #if PNG_LIBPNG_VER_MAJOR < 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR < 4)
                info_ptr->trans[i]
 #else
                info_ptr->trans_alpha[i]
#endif
               )
           );
            i++;
        }
    }
    while (i < info_ptr->num_palette) {
        image.setColor(i, qRgba(
            info_ptr->palette[i].red,
            info_ptr->palette[i].green,
            info_ptr->palette[i].blue,
            0xff
           )
       );
        i++;
    }
} else {
    // 32-bit
    if (bit_depth == 16)
        png_set_strip_16(png_ptr);

    png_set_expand(png_ptr);

    if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
        png_set_gray_to_rgb(png_ptr);

    QImage::Format format = QImage::Format_ARGB32;
    // Only add filler if no alpha, or we can get 5 channel data.
    if (!(color_type & PNG_COLOR_MASK_ALPHA)
        && !png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
        png_set_filler(png_ptr, 0xff, QSysInfo::ByteOrder == QSysInfo::BigEndian ?
                       PNG_FILLER_BEFORE : PNG_FILLER_AFTER);
        // We want 4 bytes, but it isn't an alpha channel
        format = QImage::Format_RGB32;
    }
    if (image.size() != QSize(width, height) || image.format() != format) {
        image = QImage(width, height, format);
        if (image.isNull())
            return;
    }

    if (QSysInfo::ByteOrder == QSysInfo::BigEndian)
        png_set_swap_alpha(png_ptr);

    png_read_update_info(png_ptr, info_ptr);
}

// Qt==ARGB==Big(ARGB)==Little(BGRA)
if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) {
    png_set_bgr(png_ptr);
}
静态
无效设置\u qt(QImage&image、png\u structp png\u ptr、png\u infop info\u ptr、浮动屏幕\u gamma=0.0)
{
如果(screen_gamma!=0.0&&png_get_valid(png_ptr,info_ptr,png_info_gAMA)){
双文件γ;
png_get_gAMA(png_ptr、info_ptr和file_gAMA);
png_集_伽马(png_ptr、屏幕_伽马、文件_伽马);
}
png_uint_32宽度;
png_uint_32高度;
整数位深度;
int色_型;
png_get_IHDR(png_ptr、info_ptr、宽度、高度、位深度、颜色类型、0、0);
如果(颜色类型==PNG颜色类型灰色){
//黑白或8位灰度
如果(位深度==1&&info\u ptr->channels==1){
png设置反转单声道(png ptr);
png_读取_更新_信息(png_ptr,info_ptr);
if(image.size()!=QSize(宽度、高度)| | image.format()!=QImage::format|Mono){
图像=图像(宽度、高度、图像::格式);
if(image.isNull())
返回;
}
image.setColorCount(2);
setColor(1,qRgb(0,0,0));
setColor(0,qRgb(255255));
}else if(位深度==16&&png\u获取有效(png\u ptr、info\u ptr、png\u info\u tRNS)){
png_设置_扩展(png_ptr);
png_集_带_16(png_ptr);
png_设置_灰度_至_rgb(png_ptr);
if(image.size()!=QSize(宽度、高度)| | image.format()!=QImage::format_ARGB32){
image=QImage(宽度、高度、QImage::格式_ARGB32);
if(image.isNull())
返回;
}
if(QSysInfo::ByteOrder==QSysInfo::BigEndian)
png_设置_交换_alpha(png_ptr);
png_读取_更新_信息(png_ptr,info_ptr);
}否则{
如果(位深度==16)
png_集_带_16(png_ptr);
否则如果(位_深度<8)
png_集_包装(png_ptr);
int ncols=位深度<8?1色转换。灰色;
#恩迪夫
if(gnum\u调色板num\u调色板);
int i=0;
如果(png_获取_有效(png_ptr,info_ptr,png_info_tRNS)){
而(inum\u trans){
图像。设置颜色(i,qRgba(
信息->调色板[i]。红色,
信息->调色板[i]。绿色,
信息->调色板[i]。蓝色,
#如果PNG_LIBPNG_VER_MAJOR<1 | |(PNG_LIBPNG_VER_MAJOR==1和PNG_LIBPNG_VER_MINOR<4)
信息\u ptr->trans[i]
#否则
信息ptr->trans_alpha[i]
#恩迪夫
)
);
i++;
}
}
而(inum\u调色板){
图像。设置颜色(i,qRgba(
信息->调色板[i]。红色,
信息->调色板[i]。绿色,
信息->调色板[i]。蓝色,
0xff
)
);
i++;
}
}否则{
//32位
如果(位深度==16)
png_集_带_16(png_ptr);
png_设置_扩展(png_ptr);
如果(颜色类型==PNG颜色类型灰色阿尔法)
png_设置_灰度_至_rgb(png_ptr);
QImage::Format Format=QImage::Format_ARGB32;
//如果没有alpha,只添加填充,否则我们可以获得5通道数据。
如果(!(颜色类型和PNG颜色遮罩ALPHA)
&&!png_get_valid(png_ptr,info_ptr,png_info_tRNS)){
png_集_填充符(png_ptr,0xff,QSysInfo::ByteOrder==QSysInfo::BigEndian?
PNG_FILLER_BEFORE:PNG_FILLER_AFTER);
//我们想要4个字节,但它不是alpha通道
format=QImage::format_RGB32;
}
if(image.size()!=QSize(宽度、高度)| | image.format()!=format){
图像=图像(宽度、高度、格式);
if(image.isNull())
返回;
}
if(QSysInfo::ByteOrder==QSysInfo::BigEndian)
png_设置_交换_alpha(png_ptr);
png_读取_更新_信息(png_ptr,info_ptr);
}
//Qt==ARGB==Big(ARGB)==Little(BGRA)
if(QSysInfo::ByteOrder==QSysInfo::LittleEndian){
png_set_bgr(png_ptr);
}
}

有没有人能指导我对该文件进行哪些修改,以便编译qpnghandler.cpp

icpc -c -wd654,1572 -g -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -O2 -fvisibility=hidden -fvisibility-inlines-hidden -D_REENTRANT -I/usr/include/freetype2 -fPIC -DQT_SHARED -DQT_BUILD_GUI_LIB -DQT_NO_USING_NAMESPACE -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT3_SUPPORT -DQT_MOC_COMPAT -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_NO_OPENTYPE -DQT_NO_STYLE_MAC -DQT_NO_STYLE_WINDOWSVISTA -DQT_NO_STYLE_WINDOWSXP -DQT_NO_STYLE_WINDOWSCE -DQT_NO_STYLE_WINDOWSMOBILE -DQT_NO_STYLE_S60 -DQ_INTERNAL_QAPP_SRC -DQT_NO_DEBUG -DQT_CORE_LIB -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I../../mkspecs/linux-icc -I. -I../../include/QtCore -I../../include -I../../include/QtGui -I.rcc/release-shared -I../3rdparty/xorg -I/usr/include/freetype2 -I../3rdparty/harfbuzz/src -Idialogs -I.moc/release-shared -I/usr/X11R6/include -I.uic/release-shared -o .obj/release-shared/qpnghandler.o image/qpnghandler.cpp

image/qpnghandler.cpp(169): error: pointer to incomplete class type is not allowed
      if (bit_depth == 1 && info_ptr->channels == 1) {
                            ^

image/qpnghandler.cpp(214): error: pointer to incomplete class type is not allowed
              const int g = info_ptr->trans_color.gray;
                            ^

image/qpnghandler.cpp(223): error: pointer to incomplete class type is not allowed
             && info_ptr->num_palette <= 256)
                ^

image/qpnghandler.cpp(236): error: pointer to incomplete class type is not allowed
      image.setColorCount(info_ptr->num_palette);
                          ^

image/qpnghandler.cpp(239): error: pointer to incomplete class type is not allowed
          while (i < info_ptr->num_trans) {
                     ^

 image/qpnghandler.cpp(241): error: pointer to incomplete class type is not allowed
                  info_ptr->palette[i].red,
                  ^

image/qpnghandler.cpp(242): error: pointer to incomplete class type is not allowed
                  info_ptr->palette[i].green,
                  ^
icpc-c-wd6541572-g-pthread-I/usr/include/glib-2.0-I/usr/lib/x86\u 64-linux-gnu/glib-2.0/include-O2-fvisibility=隐藏-fvisibility内联线隐藏-D_可重入-I/usr/include/freetype2-fPIC-DQT_共享-DQT_构建图形用户界面-dqu-DQT_-NO_使用名称空间-DQT_-nou-CAST_-ASCII-DQT-DQT-ASCII-du兼容-第四季度测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(Qt)测试(测试(测试)测试(测试)测试(测试)测试(测试)测试(测试)测试(测试)测试(测试)测试(测试)测试(测试)测试)测试(测试)测试(测试)测试(测试(测试)测试)测试(测试(测试)测试(测试)测试)测试)测试)测试(测试)测试)测试(测试(测试(测试)结果)测试)测试(测试(测试)测试)测试)测试(测试(测试)测试)风格)测试(测试(测试)测试)测试)测试(测试)测试)测试(核心-I..//包括-I..//包括/QtGui-I.rcc/release-shared-I../3rdparty/xorg-I/usr/include/freetype2-I../3rdparty/harfbuzz/src-Idialogs-I.moc/release-shared-I/usr/X11R6/包括-I.uic/release-shared-o.obj/release shared/qpnghandler.o image/qpnghandler.cpp
image/qpnghandler.cpp(169):错误:不允许指向不完整类类型的指针
如果(位深度==1&&info\u ptr->channels==1){
^
image/qpnghandler.cpp(214):错误:不允许指向不完整类类型的指针
const int g=info_ptr->trans_color.gray;
^
image/qpnghandler.cpp(223):错误:不允许指向不完整类类型的指针
&&信息\u ptr->num\u调色板num\u调色板);
^
image/qpnghandler.cpp(239):错误:不允许指向不完整类类型的指针
而(inum\u trans){
^
image/qpnghandler.cpp(241):错误:指向inc的指针