Возникли проблемы с размещением строк в векторе строк? - PullRequest
0 голосов
/ 10 октября 2018

Спокойной ночи, у меня есть две строки в качестве параметров (campo e valor), и я хочу поместить их в два отдельных вектора, но дает мне странные ошибки, и я не могу найти, почему, я новичок в C ++, так что, вероятно, новичокошибка.

Мой класс:

/* Includes */
#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Geral {
private:
vector<string> v_campo;
vector<string> v_valor;
public:
 Geral();
 ~Geral();
 void TomaCampoValor(string campo, string valor);
 void Mostrar();
 string GetValorCampo(string campo);
 bool ExisteCampo(string campo);
};   

Это мой cpp:

 void Geral::TomaCampoValor(string _campo, string _valor) {
    int i = 0;

    // Searching if there is already the same _campo
    for (i = 0; i < v_campo.size(); i++) {
        if (v_campo[i].c_str() == _campo) {
            v_valor[i].push_back(*_valor.c_str());`
            return;
        }
    }

     // If doesn't find it
     v_campo[i].push_back(*_campo.c_str());
     v_valor[i].push_back(*_valor.c_str());
    }

Это ошибка, которая дает мне Ошибка, которая дает мне:

Заранее спасибо, если я не дал понять, что радуюсь самому себе, спроси.

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Поскольку _valor является типом std::string, нет необходимости создавать std::string из метода c_str().

Попробуйте:

v_campo.push_back(_campo);
v_valor.push_back(_valor);

Другая проблема заключается в том, что v_campo[i] имеет тип std::string, а std::string не имеет метода push_back для строк.

0 голосов
/ 11 октября 2018

Итак, исходя из вашего подхода к проблеме и дальнейших вопросов, я полагаю, вам нужно создать какую-то базу данных для лагерей и их особенности, которые вы хотите связать с соответствующими лагерями.
Вы можете начать сследующий подход:

  • Ищите более оптимизированную структуру данных для хранения ваших данных, поскольку вы хотите получить что-то вроде этого {"Camp1": feature_array1, "Camp2": feature_array2} (несколько подсказок: пары ключ-значение и очень быстрая вставка и поиск элементов)

  • Попробуйте вызывать конструкторы не-POD-типов, это может предотвратить некоторые ошибки или помочь вам скомпилировать программу.

  • Посмотрите на аргументы const reference, это может быть полезно.

  • std::string не совпадает со строками char * в стиле C, так как в конце он не имеет \ 0, поэтому ваш тест на равенство бесполезен.

  • Проверьте плюсы и минусы using namespace std

0 голосов
/ 10 октября 2018

удивило, что это даже компилируется

вы имеете в виду

 v_campo.push_back(_campo);
 v_valor.push_back(_valor);

РЕДАКТИРОВАТЬ:

это тоже неправильно

(v_campo[i].c_str() == _campo)

вы имеете в виду

(v_campo[i] == _campo)

Убедитесь, что вы не игнорируете предупреждения компилятора, они вам помогут

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...