2017-07-03 8 views
0

icpcでコンパイルしようとすると、「式にはクラス型が必要です」と表示されます。これについて混乱しました。助けてください。__m256がメンバーにアクセスできないと宣言した後

int main() 
{ 
    __m256d temp; 
    temp.m256d_f64[0] = 1; 
    return 0; 
}  
+1

どのコンパイラ/プラットフォームですか? –

+0

@HannesHauptmann Ubuntu 16.04.2とIntel C++ –

+0

私の知る限り、あなたのコードのような値に直接アクセスすることはできません。代わりにそれを行う関数を使ってみてください。 –

答えて

0

私は私の最後にこの問題を再現できます。上記の定義で

typedef struct _MMINTRIN_TYPE(32) __m256d { 
    double m256d_f64[4]; 
} __m256d; 

、構造体名とエイリアスが現在のコンパイラを混乱されている同じです:インテルコンパイラーに同梱immintrin.hでは、我々は__m256dのための次の定義を持っています。インテル®コンパイラーは、小さなテストケースを証明することができますクラスとしてのtypedef名を認識していないよう:

$ cat test1.cc 
typedef struct __m256d { 
    double m256d_f64[4]; 
} m256d; 

int main() 
{ 
    __m256d temp; 
    temp.m256d_f64[0] = 1; 
    return 0; 
} 
$ icpc test1.cc –c 

私は、typedefのを変更し、以下に示すように温度をインスタンス化する場合(代わりに構造体名のtypedefed名を使用します) ICCは失敗しますが、GCCが動作します。

$ cat test1.cc 
typedef struct m256d { 
    double m256d_f64[4]; 
} __m256d; 

int main() 
{ 
    __m256d temp; 
    temp.m256d_f64[0] = 1; 
    return 0; 
} 
$ icpc test1.cc -c 
test1.cc(8): error: expression must have class type 
     temp.m256d_f64[0] = 1; 
    ^

compilation aborted for test1.cc (code 2) 
$ g++ test1.cc -c 

この問題はIntelのコンパイラーエンジニアリングチームに報告しました。

関連する問題