gpt4 book ai didi

c++ - 错误 : variable or field 'print_array' declared void

转载 作者:行者123 更新时间:2023-11-28 02:49:29 26 4
gpt4 key购买 nike

我的编译器在以下代码段中的函数声明行抛出错误 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com