Intel C错误:“pair”不是类“std :: pair”的非静态数据成员或基类

我在QtCreator中使用Intel C编译器和qmake.在我的项目中,我使用std :: map.

std::map<int,double> dataBase;
dataBase[2] = 2.445;

使用g编译和运行此代码没有任何问题.如果我尝试使用ICC进行编译,则会发生以下错误:

/usr/include/c++/4.8.0/tuple(1075): error: "pair" is not a nonstatic data member or base class of class "std::pair<const int, double>"

完全编译错误要长得多.我对include路径有点困惑,因为对我来说它看起来像是一个使用的g库.如果我注释掉这部分程序编译,我可以验证是否使用了ICC.

有谁知道为什么英特尔C编译器会导致此错误?

编辑:

我创建一个最小的示例,并找到导致此问题的编译器选项:
Folowing是* .pro文件的内容

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

QMAKE_CXXFLAGS += -std=c++11

main.cpp中

#include <iostream>
#include <map>

using namespace std;

int main(){
    map<int,double> dataBase;
    dataBase[2] = 2.445;
    cout << dataBase[2] << endl;
    return 0;
}

它没有

-std=c++11

但会导致编译器错误.

最佳答案
我遇到的问题和你描述的一样……真的很奇怪.每个其他编译器(clang,gcc,msvc11)编译它没有任何问题.我想这是因为4.8.x标题. icpc -v至少说版本13.1.1(gcc版本** 4.7.0 **兼容性)…

解决方法:

template<class K, class V>
V &changemapvalue(std::map<K, V> &map, K &key, V &val)
{
#if defined(__GNUC__) && defined(__INTEL_COMPILER)
    if (map.find(key) != map.end()) map.erase(key);
    map.insert(std::pair<K, V>(key, val));
#else
    map[key] = val;
#endif //__GNUC__ && __INTEL_COMPILER
    return val;
}

但这很愚蠢.

转载注明原文:Intel C错误:“pair”不是类“std :: pair”的非静态数据成员或基类 - 代码日志