获取数组的长度.编译器错误
Getting the length of an array. Compiler errors.
我尝试过:
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;}
这会失败,因为不允许将数组作为参数传递(只能传递对数组的引用)。
相关文章:
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 重载方法的方式会在使用临时调用时生成编译器错误
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 编译器错误:destuctor 的更宽松的抛出说明符
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- C++ G++ 编译器 - 错误:隐式声明的定义
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 模板模板参数和模板别名:编译器错误?
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- C1001内部编译器错误是由于矢量初始化(如数组)引起的
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何在C++中克服此 C4430 编译器错误?
- 尝试使用 WinBGI 显示文本时出现编译器错误
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- C++自定义分配器大小参数作为模板参数会引发编译器错误