我在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;
}
但这很愚蠢.
相关文章