作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的编译器在以下代码段中的函数声明行抛出错误 error: variable or field 'print_array' declared void
。
#include <iostream>
template <typename T>
struct arrWrapper
{
T* firstPtr;
size_t length;
};
template <typename T>
void print_array(arrWrapper W)
{
for (T* i(W.firstPtr), j(W.firstPtr + W.length); i != j; i++)
std::cout << *i << ", ";
}
int main()
{
int myArray[] = {1, 2, 69, 144};
arrWrapper myWrapper = {myArray, sizeof(myArray)/sizeof(int)};
print_array(myWrapper)
return 0;
}
任何人都可以解释为什么我会收到该错误吗?
我还有一个问题:有谁知道如何使用 std::cout
检查变量是否能够打印到控制台?
换句话说,我想把我的功能改成这样:
template <typename T>
void print_array(arrWrapper W)
{
/* check whether I can cout an element of type T, and if so,
terminate the function here
*/
for (T* i(W.firstPtr), j(W.firstPtr + W.length); i != j; i++)
std::cout << *i << ", ";
}
最佳答案
你需要
template <typename T>
void print_array(arrWrapper<T> W)
// ^^^ provide a template parameter
同样的
arrWrapper<int> myWrapper = //...
稍后在您的代码中。
对于第二个问题:您可以使用 C++11 的类型特征禁用该函数(或使用 C++11 之前的 Boost 版本):
#include <type_traits>
template <typename T>
typename std::enable_if<sizeof(std::cout<<std::declval<T>())!=0>::type
print_array(arrWrapper<T> W)
{
for (T* i(W.firstPtr), j(W.firstPtr + W.length); i != j; i++)
std::cout << *i << ", ";
}
如果无法打印 T
,将导致编译时错误。
关于c++ - 错误 : variable or field 'print_array' declared void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23395104/
#include #include #include #define length 100 void print_array(); int main() { int m,n,i,j;
#include #include #define SIZE 10 void Print_Array(int values[], int length); void
我的编译器在以下代码段中的函数声明行抛出错误 error: variable or field 'print_array' declared void。 #include template str
我是一名优秀的程序员,十分优秀!