在(私有)继承向量<string>上获取迭代器
Getting an iterator on a (private) inherited vector<string>
我在自定义类上定义了一个向量的私有继承,我想在它上获得一个迭代器。但我遇到了一个转换错误。
这是我的解决方案。h
#include <vector>
#include <string>
#ifndef SOLUTIONS_H_
#define SOLUTIONS_H_
class Solutions : private std::vector<std::string>
{
public:
using std::vector<std::string>::begin;
using std::vector<std::string>::end;
using std::vector<std::string>::push_back;
void Show() const;
};
#endif
这是我的解决方案.cpp
#include <iostream>
#include "solutions.h"
using std::cout;
using std::endl;
using std::vector;
using std::string;
void Solutions::Show() const
{
cout << "Solutions : " << endl;
if ( ! vector<string>::empty() )
{
for (vector<string>::iterator it = begin(); it != end(); ++it)
{
cout << *it << endl;
}
}
}
这是我的testrongolutions.cpp
#include "solutions.h"
int main()
{
Solutions resultat;
resultat.Show();
resultat.push_back("10 + 7 = 17");
resultat.push_back("3 / 3 = 1");
resultat.push_back("17 - 1 = 16");
resultat.Show();
resultat.push_back("AA * BB = CC");
resultat.push_back("CC - DD = EE");
resultat.push_back("AA * EE = FF");
resultat.Show();
return 0;
}
这是我在终端上使用的命令(编译器Ubuntu/Linaro 4.7.3-1ubuntu1):
g++ solutions.h solutions.cpp test_solutions.cpp -o test_solutions
以下是编译器给出的错误:
solutions.cpp: In member function ‘void Solutions::Show() const’:
solutions.cpp:12:44: erreur: conversion from ‘std::vector<std::basic_string<char> >::const_iterator {aka __gnu_cxx::__normal_iterator<const std::basic_string<char>*, std::vector<std::basic_string<char> > >}’ to non-scalar type ‘std::vector<std::basic_string<char> >::iterator {aka __gnu_cxx::__normal_iterator<std::basic_string<char>*, std::vector<std::basic_string<char> > >}’ requested
我该如何解决这个问题?
提前谢谢。
错误消息实际上非常好。您需要在此处使用const_iterator
:
for (vector<string>::const_iterator it = begin(); it != end(); ++it)
// ^^^^^
{
cout << *it << endl;
}
原因是您在const
成员函数中,所以不能调用begin()
和end()
的非const
版本。
或者只使用auto
。
我认为您需要使用const_iterator
而不是iterator
for (vector<string>::const_iterator it = begin(); it != end(); ++it)
^^^^^^^^^^^^^^
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- EASTL矢量<向量<int>>连续的
- 使用 std::string () const 函数启动线程或未来
- 使用char类型将decimal转换为string,将string转换为decimal
- 迭代和比较映射<字符串、矢量<string>> c++ 中的值
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 将向量解析<string>为字符串
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 如何更改大小(std::string)
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- std::string 的对象真的可以移动吗?
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- <string> 使用 for 循环写入向量