2

我试过了:

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 [])' : could not deduc template argument for 'S'

除了更改编译器之外,是否有一种解决方法可以用来获取数组的大小?

4

2 回答 2

2

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

于 2013-08-28T11:53:11.607 回答
1

但我收到了这条消息:

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

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

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

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

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

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

于 2013-08-28T09:32:41.893 回答