获取数组的长度.编译器错误

Getting the length of an array. Compiler errors.

本文关键字:编译器 错误 数组 获取      更新时间:2023-10-16

我尝试过:

template <typename T,unsigned S> 
unsigned getArraySize(const T (&v)[S]) { return S; } 

在莫蒂的回答之后https://stackoverflow.com/a/18078435/512225

但我收到了这样的信息:

错误C2265:":对零大小数组的引用是非法的

我的编译器出了什么问题?

我看了一下这一页: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:"unsigned int __cdecl getArraySize(const T[])":无法推导出"S"的模板参数

除了更改编译器之外,还有什么变通方法可以用来获取数组的大小吗?

这可能是VC6的限制,您尝试过其他编译器吗?

但我收到了这样的信息:

错误C2265:":对零大小数组的引用是非法的

零大小的数组在C++中是非法的
所以这可能意味着你尝试了一个零大小的数组。

这个可以编译,但当我尝试使用它时:

如果你不使用它,那么编译器将忽略一个模板(即使它有错误)。这是因为在不知道所涉及的类型的情况下,不能总是推断模板函数是否正确。因此,除非调用模板函数,否则不会生成错误消息。

模板<typename T,unsigned S>
unsigned getArraySize(const T v[S]){return S;}

这会失败,因为不允许将数组作为参数传递(只能传递对数组的引用)。