다음 코드는 나에게 잘 보이는 :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
를 얻을 나는이 코드를 컴파일 할 것으로 예상한다. 내가 놓친 게 있니? 누구든지이 이상한 동작을 수정하는 방법을 알고 있습니까 (서식 파일을 사용하지 않고 똑같은 작업을하면 잘 컴파일되고 출력됩니다).
템플릿을 제거하는 옵션이 아니라는 것을 유의하십시오.이 예제를 사용하면 템플릿에 배열이 포함 된 형식이 필요한 코드에서 발생하는 문제를 재현 할 수 있습니다.
감사
FWIW, GCC 4.7.1에서 잘 컴파일 : http://liveworkspace.org/code/19f48dbdb07463b08a310c168ab59a67. 그것이 또 다른 MSVC 버그 또는 뭔가인지 조심하십시오. – chris
나는 계산식이 계산식이라고 생각하지 않는다. – Nobody
@Nobody'sizeof array/sizeof array [0]'은 배열의 길이를 계산하는 일반적인 관용구입니다.당신이 생각하기에 그것은 무엇이라고 생각합니까? 아니면 다른 사람들이 생각한다고 생각합니까? – hvd