下面的代碼看起來好像沒什麼問題:C2070 - 非法的sizeof操作
#include <stdio.h>
template <typename T>
struct A
{
static float m_kA[];
};
template <typename T>
float A<T>::m_kA[] = {1.0f, 2.0f, 3.0f};
int main()
{
printf("%d\n",
sizeof(A<unsigned int>::m_kA)/
sizeof(A<unsigned int>::m_kA[0]));
return 0;
}
但是當我VC9編譯我碰到下面的錯誤
error C2070: 'float []': illegal sizeof operand
我希望這段代碼進行編譯。我錯過了什麼嗎?有沒有人知道一種方法來解決這個奇怪的行爲(請注意,沒有模板編譯罰款和輸出3完全相同的東西)。
注意,除去模板不是一個選項,我提出這個實例來再現,我在代碼林具有其中i需要包含數組的類型是一個模板的問題。
由於
FWIW,在編譯GCC 4.7.1罰款:http://liveworkspace.org/code/19f48dbdb07463b08a310c168ab59a67。看它是另一個MSVC錯誤或其他東西。 – chris
我不認爲這個表達式正在計算你認爲它正在計算的內容。 – Nobody
@Nobody'sizeof array/sizeof array [0]'是計算數組長度的常用術語。你認爲它計算的是什麼,或者你認爲其他人認爲它計算的是什麼? – hvd