我试过了:
template <typename T,unsigned S>
unsigned getArraySize(const T (&v)[S]) { return S; }
在Motti的回答https://stackoverflow.com/a/18078435/512225
之后但我收到了这条消息:
错误C2265:&#39;&#39; :引用零大小的数组是非法的
我的编译器出了什么问题?
我看了一下这个页面: http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/4b78bcef-4c33-42f1-a4c5-fb6f702ced0b/vs6-c-compile-error-using-getaddrinfo 所以我尝试了这个解决方案:
template <typename T,unsigned S>
unsigned getArraySize(const T v[S]) { return S; }
这个编译,但当我尝试使用它时:
double myX[2] = {7,3};
std::cout << getArraySize(myX) << std::endl;
我收到编译错误:
错误C2783:&#39; unsigned int __cdecl getArraySize(const T [])&#39; :无法推断出&#39; S&#39;
除了更改编译器之外,我是否可以使用解决方法来获取阵列的大小?
答案 0 :(得分:2)
这可能是VC6的限制,您是否尝试过其他编译器?
答案 1 :(得分:1)
但我收到了这条消息:
错误C2265:'':对零大小数组的引用是非法的
在C ++中,零大小的数组是非法的 所以这可能意味着您尝试使用零大小的数组。
这个编译,但当我尝试使用它时:
如果您不使用它。然后编译器将忽略模板(即使它有错误)。这是因为在不知道所涉及的类型的情况下,您无法总是推断模板函数是否正确。因此,除非调用模板函数,否则不会生成错误消息。
模板&lt; typename T,unsigned S&gt;
unsigned getArraySize(const T v [S]){return S; }
这会失败,因为您不允许将数组作为参数传递(您只能将引用传递给数组)。