使用Mac上的intel编译器编译C ++代码错误:预期标识符为

时间:2017-09-22 02:13:47

标签: c++ macos compiler-errors compilation intel

我的笔记本电脑从昨天起就无法编译一个简单的c ++代码,之前它完全正常。

c ++代码可以是main.cpp文件中的hello-world代码。

#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    cout<<"Hello World"<<endl;

    return 0;
}

我正在尝试按

编译代码
icpc main.cpp

错误信息是

在/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / algorithm(637)中包含的文件中,                  来自/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / __ string(56),                  来自/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / string_view(171),                  来自/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / string(470),                  from / Library / Developer / CommandLineTools / usr / include / c ++ / v1 / __ locale(15),                  来自/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / ios(216),                  来自/ Library / Developer / CommandLineTools / usr / include / c ++ / v1 / iostream(38),                  来自main.cpp(1): / Library / Developer / CommandLineTools / usr / include / c ++ / v1 / type_traits(2065):错误:预期的标识符       :public decltype((_ VSTD :: __ is_assignable_test&lt; _Tp,_Arg&gt;(0))){};

编译中止了main.cpp(代码2)

一些信息:

  • 我使用的是icpc(ICC)17.0.4 20170411,它是从英特尔®ParallelStudio XE Composer Edition for C ++ macOS安装的。

  • 我的Mac是MacBook Pro(15英寸,2017年),版本10.12.6。

  • 如果我使用gnu编译器,它可以正常工作。虽然我的代码需要使用intel的编译器。

  • 代码以前工作,不知道它变成了这个。我已经尝试重新启动系统。

=============================================== ======================= Update1 :更新“Xcode命令行工具”后发生问题。看起来/Library/Developer/CommandLineTools/usr/include/c++/不正确。

=============================================== ======================= Update2 :可以使用icpc -std=c++11 main.cpp

解决此问题

然而,当我将main.cpp更改为

#include <iostream> 
#include <vector>
#include <tuple>

using namespace std;

tuple<vector<int>, vector<int>, vector<int>> 
getAllBlockMeanErrorTuple(const vector<int> &vec)
{
    vector<int> fact, mean, err;
    fact.resize( vec.size() );
    mean.resize( vec.size() );
    err.resize(  vec.size() );
    return make_tuple(fact, mean, err);
}


int main(int argc, char** argv)
{
    cout<<"Hello World"<<endl;

    return 0; 
}

即使我使用icpc -std=c++11 main.cpp

,它也会再次出错
/Library/Developer/CommandLineTools/usr/include/c++/v1/__tuple(401): error: type name is not allowed
  -> __all<typename enable_if<_Trait<_LArgs, _RArgs>::value, bool>::type{true}...>;

      detected during:

2 个答案:

答案 0 :(得分:2)

我在将命令行工具升级到2017年9月的版本时遇到了同样的问题

虽然没有找到合适的解决方案,但我重新安装了以前版本(2017年4月)的命令行工具,它解决了问题(https://developer.apple.com/download/more/#)。

我期待有一个干净的解决方案。

编辑(5/12/17): 我通过使用gcc重新编译所有内容解决了这个问题。在编译时,英特尔编译器将使用在路径中响应gccg++的编译器。在/usr/local/bin中使用自制程序和一些符号链接的安装会将新安装的gcc推送到clang前面,然后避免在每次系统更新时更改gcc。希望它有所帮助。

答案 1 :(得分:0)

尝试检查您是否使用了正确的设置 GNU正在运行,因为它自动设置为C ++ 尝试将编译器设置为c ++ 希望这有效。 或者您可以使用xcode编写c ++代码。