0
當我試圖用icpc進行編譯時,它顯示「表達式必須具有類類型」。對此感到困惑。請幫忙。聲明__m256未能訪問其成員
int main()
{
__m256d temp;
temp.m256d_f64[0] = 1;
return 0;
}
當我試圖用icpc進行編譯時,它顯示「表達式必須具有類類型」。對此感到困惑。請幫忙。聲明__m256未能訪問其成員
int main()
{
__m256d temp;
temp.m256d_f64[0] = 1;
return 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
我已向英特爾的編譯器工程團隊報告此問題。
哪個編譯器/平臺? –
@HannesHauptmann Ubuntu 16.04.2和Intel C++ –
據我所知,你不能直接訪問你的代碼中的值。嘗試使用這樣做的功能。 –