gpt4 book ai didi

c++ - 构造函数参数列表中的模板参数无效

转载 作者:行者123 更新时间:2023-11-30 05:04:05 25 4
gpt4 key购买 nike

晚上好,我正在尝试制作一个模板化类,它将有两个成员,它们是 const_iterators,指向 vector 子部分的开头和结尾。我想让这个类通用,这样我就可以将它用于任何类型的 vector 。

我的类定义在文件 ThreadWorker.h 中,如下所示:

template <typename T>
class VectorWorker
{
public:
VectorWorker<T>() = default;
VectorWorker<T>( std::vector<typename T>::const_iterator begin, std::vector<typename T>::const_iterator end);
void Work() const;

private:
std::vector<typename T>::const_iterator beginIt; /* Stores value of left iterator that defines data for this worker */
std::vector<typename T>::const_iterator endIt; /* Stores value of right iterator that defines data for this worker */
};

当我尝试编译我的代码时,我收到一条错误消息,指出模板参数无效:

error: template argument 1 is invalid
VectorWorker<T>( std::vector<typename T>::const_iterator begin, std::vector<typename T>::const_iterator end);

我不太明白为什么会出现此错误,因为我已通过“typename”关键字指定 T 是一个类型名模板参数。任何人都可以帮助解释这里发生了什么,或者给我指出一个好的资源吗?谢谢。

最佳答案

尝试移动 typenametemplate之外参数列表:

template<typename T>
class VectorWorker {
private:
typename std::vector<T>::const_iterator beginIt;
typename std::vector<T>::const_iterator endIt;
public:
VectorWorker<T>() = default;
VectorWorker<T>( typename std::vector<T>::const_iterator begin, typename std::vector<T>::const_iterator end ) :
beginIt( begin ),
endIt( end )
{}
};

您之前拥有的成员和构造函数参数

std::vector<typename T>::const_iterator beginIt; 
std::vector<typename T>::const_iterator endIt;

std::vector<typename T>::const_iterator begin;
std::vector<typename T>::const_iterator end;

不是Types

要解决这个问题,成员的模板参数列表以及构造函数参数只需要模板类型 <T>

制作const_iterator这是一种类型,您需要将它们声明为 typename

typename std::vector<T>::const_iterator name;

关于c++ - 构造函数参数列表中的模板参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49090829/

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