2017-09-11 17 views
2

インテルコンパイラを使用してC++コードをコンパイルするのに苦労しています。コンパイラはエラーなくジョブを実行します。 my_func_data.hは(問題を実証する目的のために)別のヘッダーファイルでなければならない構造であるGNUコンパイラとICCコンパイラの違い:コマンドラインの警告#10370:オプション-std = C++ 11はCコンパイルでは無効

MAIN.CPP

#include <iostream> 
#include <stdlib.h> 
#include <vector> 
#include <stdio.h> 
#include "my_func_data.h" 
int main() 
{ 
    my_func_data dataFunction; 
    dataFunction.vec.push_back(1); 
    dataFunction.vec.push_back(2); 
    dataFunction.vec.push_back(3); 
    dataFunction.vec.push_back(4); 

    for(int i=0;i<4;i++){ 
     printf("%f\n",dataFunction.vec[i]); 
    } 

return 0; 
} 

は、以下の主な機能を考えます。

#ifndef my_func_data_H_ 
#define my_func_data_H_ 

#include <stdio.h> 
#include <stdlib.h> 
#include <vector> 

typedef struct 
{ 
    std::vector<double>vec; 
} 
my_func_data; 
#endif 

私は2つのコンパイラを読み込み、それぞれを使って2つの関数をコンパイルしようとします。 GNUコンパイラを使用して

第一:

module load compiler/gnu-6.2.0 
g++ -std=c++11 Main.cpp my_func_data.h -o main 
./main 
1.000000 
2.000000 
3.000000 
4.000000 

次のコードをコンパイルからICCコンパイラを防ぐことができるものインテルコンパイラ

module load compiler/intel-15.0 
icc -std=c++11 Main.cpp my_func_data.h -o main 
icc: command line warning #10370: option '-std=c++11' is not valid for C compilations 
my_func_data.h(6): catastrophic error: cannot open source file "vector" 
    #include <vector> 
       ^

を使用していますか? また、構造体my_func_dataをmain関数に埋め込むと、コンパイルしてすべてを正しく実行します。

ありがとうございました。

+2

[icc options](https://software.intel.com/sites/default/files/m/d/4/1/d/8/icc.txt)を見ましたか? –

+0

ありがとうございました! '-std = C++ 11'(これは私がここで唯一のオプションであると理解しています)はそれ自身の問題ではありません。これは、スタンドアローンのヘッダファイルとしてmy_func_dataをコンパイルする瞬間です。コンパイラは、Cで書かれたコードをコンパイルしていることを示す警告をスローし、その後、ベクトルのエラーをスローします。あなたのコメントを誤解していますか?私にお知らせください。 – user2518768

答えて

0

問題:

  1. -std=c++11は、有効なコンパイラオプションではありません。 the list of valid compiler optionsを参照してください。
  2. iccは.hファイルをCソースファイルではなくCソースファイルとして扱います。
  3. my_func_data.hをコマンドラインで使用する必要はありません。単純に使用します。

    icc Main.cpp -o main 
    
3

iccはCコンパイラです。 C++コンパイラはicpcです。

gccg++と似ています。

関連する問題