在(私有)继承向量<string>上获取迭代器

Getting an iterator on a (private) inherited vector<string>

本文关键字:gt string 获取 迭代器 lt 继承 向量 私有      更新时间:2023-10-16

我在自定义类上定义了一个向量的私有继承,我想在它上获得一个迭代器。但我遇到了一个转换错误。

这是我的解决方案。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)
                      ^^^^^^^^^^^^^^