gpt4 book ai didi

c++ - 迭代器和模板

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

我尝试操作迭代器。

template <typename Mytype>
class Myclass
{
public:
Myclass ( const Mytype & myarg)
{
this->data=myarg;
}
~Myclass ( void ){}
set<int> Test ( const Mytype & myarg ) const
{
set<int> result;
typename Mytype::iterator it=myarg.begin();
return result;
}
private:
//
mutable Mytype data;
};

这段代码正在编译。但是当我想使用它时,它不再编译:这是一个例子:

int main()
{
Myclass <string> t0 ( "caacaa" );
set<int> r=t0.Test("a");
return 0;
}

我现在得到一个错误:

test.cpp: In member function ‘std::set<int>Myclass<Mytype>::Test(const Mytype&) const [with Mytype =std::basic_string<char>]’:test.cpp:38:26: instantiated from heretest.cpp:25:48: error: conversion from‘std::basic_string<char>::const_iterator {aka__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >}’ to non-scalar type ‘std::basic_string<char>::iterator {aka__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}’ requested

我试图弄清楚哪里出了问题,但我不明白这个错误。

最佳答案

在常量成员函数中,成员数据也是常量。所以你需要使用const_iterator:

typename Mytype::const_iterator it = myarg.begin();

因为myarg.begin()返回const迭代器,因为myarg是const,因为成员函数是const。

更好地使用 auto:

auto it = myarg.begin(); 

但是您仍然需要知道是const — auto 帮助您避免输入长名称,不知道 是常量。

关于c++ - 迭代器和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23266888/

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