2017-07-03 45 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

我可以在我的結尾重現此問題。在隨英特爾編譯器的immintrin.h,我們有__m256d定義如下:

typedef struct _MMINTRIN_TYPE(32) __m256d { 
    double m256d_f64[4]; 
} __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和如下所示實例化溫度(使用通過typedef名稱,而不是結構名) ,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 

我已向英特爾的編譯器工程團隊報告此問題。

相關問題