依赖范围;需要在前面输入名称;
dependent scope; need typename in front;
我想创建一个模板,如下所示。我想从矢量vec1
中删除项目列表。并且我要删除的项目的索引存储在index_list
.
#include <vector>
using namespace std;
template <typename a_type>
bool vector_remove(vector< a_type > & vec1, vector< int > index_list)
{
//index_list is sorted in order from small to large.
if(index_list.size() > vec1.size())
{
cout << "ERROR in 'vector_remove()': index_list is longer than vec1."<<endl;
return false;
}
if(index_list.size() == vec1.size())
{
vec1.clear();
return true;
}
vector< int >::iterator ind_pt = index_list.begin();
vector< a_type >::iterator vec1_pre = vec1.begin();
vector< a_type >::iterator vec1_pos = vec1.begin();
int vec1_ind = 0;
while(ind_pt != index_list.end() && vec1_pos != vec1.end())
{
if(*ind_pt == vec1_ind)
{
ind_pt ++;
vec1_pos ++;
vec1_ind ++;
}
else if( *ind_pt > vec1_ind )
{
*(vec1_pre) = *(vec1_pos);
vec1_pos ++;
vec1_pre ++;
vec1_ind ++;
}
else
{
cout << "ERROR in 'vector_remove'." <<endl;
return false;
}
}
while(vec1_pos != vec1.end())
{
*(vec1_pre) = *(vec1_pos);
vec1_pos ++;
vec1_pre ++;
}
// the above codes are to put all the rejected elements to the end of the vec1.
// pop back all the rejected elements.
while(vec1_pre != vec1.end() )
{
vec1.pop_back();
}
return true;
}
但它返回了很多错误:
In file included from demo.cpp:3:0:
my_vector.h: In function ‘bool vector_remove(std::vector<a_type>&, std::vector<int>)’:
my_vector.h:21:2: error: need ‘typename’ before ‘std::vector<a_type>::iterator’ because ‘std::vector<a_type>’ is a dependent scope
vector< a_type >::iterator vec1_pre = vec1.begin();
^
my_vector.h:21:29: error: expected ‘;’ before ‘vec1_pre’
vector< a_type >::iterator vec1_pre = vec1.begin();
^
my_vector.h:22:2: error: need ‘typename’ before ‘std::vector<a_type>::iterator’ because ‘std::vector<a_type>’ is a dependent scope
vector< a_type >::iterator vec1_pos = vec1.begin();
^
my_vector.h:22:29: error: expected ‘;’ before ‘vec1_pos’
vector< a_type >::iterator vec1_pos = vec1.begin();
^
my_vector.h:24:38: error: ‘vec1_pos’ was not declared in this scope
while(ind_pt != index_list.end() && vec1_pos != vec1.end())
^
my_vector.h:34:6: error: ‘vec1_pre’ was not declared in this scope
*(vec1_pre) = *(vec1_pos);
^
my_vector.h:45:8: error: ‘vec1_pos’ was not declared in this scope
while(vec1_pos != vec1.end())
^
my_vector.h:47:5: error: ‘vec1_pre’ was not declared in this scope
*(vec1_pre) = *(vec1_pos);
^
my_vector.h:54:8: error: ‘vec1_pre’ was not declared in this scope
while(vec1_pre != vec1.end() )
谁能帮我解决这个问题?
编译器
说
my_vector.h:21:2:错误:之前需要"类型名称" 'std::vector::iterator' 因为 'std::vector' 是一个 依赖范围
所以你需要写
typename vector< a_type >::iterator vec1_pre = vec1.begin();
typename vector< a_type >::iterator vec1_pos = vec1.begin();
请参阅我必须在哪里以及为什么必须放置"模板"和"类型名称"关键字?
最后一句话:在C++11中,你可以使用auto
,而不必再思考:
auto vec1_pre = vec1.begin();
auto vec1_pos = vec1.begin();
相关文章:
- 如何使用用户输入在C++中正确填充2D数组
- 我可以根据用户输入在运行时生成"循环"吗?
- Windows.h 输入在函数之外不起作用
- 当输入在带有空格的单行中给出时,cin 如何在 while 循环中工作?
- 如果用户输入在整数变量中浮动怎么办?
- 增强循环缓冲区push_back在前面插入数据
- C++ 对象数组字符串输入在控制台上不起作用
- JIT 编译器及其在 C++ 前面加快 .NET 中程序执行速度的好处
- if 语句仅在前面有调试 cout 行(C 中的多线程)时才通过
- 连续 cin 输入在C++中的工作原理
- C++用用户输入在循环中填充 char 数组:输入整个字符串时到底发生了什么?
- 根据用户的输入在运行时创建对象
- 如何根据用户输入在OpenGL中显示/隐藏点
- 每当我在文件中编写时,我如何在前面附加文本
- 如何根据输入在数组中分配多个索引
- 根据这些字符串输入在句子中的位置对这些字符串输入进行排序的更快方法是什么
- 来自 txt 文件的输入在第二次读取/传递时不匹配 (C++)
- 阵列输入在按Enter成为0
- 如何使用“get”;函数在前面的输入之后
- 依赖范围;需要在前面输入名称;