在将字符串放入字符串向量时遇到问题吗?

时间:2018-10-10 20:45:49

标签: c++ vector

晚安, 我有两个字符串作为参数(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());
    }

这是给我的错误 Error that is giving me:

如果我没有明确表达自己的意愿,请先谢谢。

3 个答案:

答案 0 :(得分:0)

很惊讶,甚至可以编译

你的意思

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

编辑:

这也是错的

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

你的意思

(v_campo[i] == _campo)

确保您不要忽略编译器警告,它们会在您的帮助下

答案 1 :(得分:0)

由于_valorstd::string类型,因此无需从std::string方法创建c_str()

尝试一下:

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

另一个问题是v_campo[i]std::string类型,而std::string没有用于字符串的push_back方法。

答案 2 :(得分:0)

因此,根据您对问题的处理方式和进一步的问题,我想您需要为营地创建某种数据库以及它们想要与各个营地链接的某种功能。
您可以从以下方法开始:

  • 寻找更优化的数据结构来保存数据,因为您想要获得类似{{“ Camp1”:feature_array1,“ Camp2”:feature_array2}(一些提示:键值对和快速插入并找到物品)

  • 尝试在非POD类型上调用构造函数,它可以防止某些错误或可以帮助您编译程序。

  • 研究const引用参数,可能会有所帮助。

  • std::string不等于C样式的char *字符串,因为它的末尾没有\ 0,因此相等性测试是无用的。

  • 查看using namespace std

  • 的利弊