निम्नलिखित कोड मेरे लिए ठीक लग रहा है: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)।
ध्यान दें कि टेम्पलेट को हटाने का विकल्प एक विकल्प नहीं है, मैंने इस उदाहरण को एक कोड में पुन: उत्पन्न करने के लिए बनाया है जहां मुझे एक टेम्पलेट होने के लिए सरणी युक्त प्रकार की आवश्यकता है।
धन्यवाद
एफडब्ल्यूआईडब्ल्यू, जीसीसी 4.7.1 पर ठीक संकलित: http://liveworkspace.org/code/19f48dbdb07463b08a310c168ab59a67। इसे अभी तक एक और एमएसवीसी बग या कुछ देखें। – chris
मुझे नहीं लगता कि अभिव्यक्ति उस गणना की गणना कर रही है जो आपको लगता है कि यह गणना कर रहा है। – Nobody
@Nobody 'sizeof array/sizeof array [0] 'एक सामान्य मुहावरे है जो सरणी की लंबाई की गणना करता है।आपको क्या लगता है कि यह गणना करता है, या आप क्या सोचते हैं कि अन्य लोग सोचते हैं कि यह गणना करता है? – hvd