Как я могу передать вектор в качестве аргумента другому вектору? - PullRequest
0 голосов
/ 31 января 2019

У меня проблемы с передачей вектора объекта другому вектору объектов другого типа.Я пытаюсь создать объект Partidas, который отображает массив или вектор объектов типа Producto вместе с некоторыми другими атрибутами, но это целые и строковые значения, и у меня нет проблем с ними.Когда я запускаю свою программу, когда я прохожу через цикл las нажатием «0», это означает «плохой доступ».Я знаю, что код немного длинный, но я попытался поставить все в вопрос, так что, надеюсь, вы, ребята, сможете мне помочь.Кроме того, если вы знаете лучший способ сделать то, что я пытаюсь сделать, пожалуйста, дайте мне знать об этом.Спасибо!


vector<Producto> vectorProductos;

while(file >> sID >> sDesc >> sUMed >> sFam >> sClass >> dVolumen >> dLongitud >> sPrecio){
vectorProductos.push_back(Producto(sID, sDesc, sUMed, sFam, sClass, dVolumen, dLongitud, stringToDouble(sPrecio)));
iNumProductos++;
}
file.close();


char cOption;
int iNumPartidas;
do{
    cout << "Menu." << endl;
    cout << "------------------" << endl;
    cout << "a. Crear un proyecto." << endl;
    cout << "b. Ver lista de proyectos." << endl;
    cout << "c. Ver lista de productos existentes." << endl;

    cout << "z. Terminar programa." << endl;
    cin >> cOption;
    switch(cOption){
        case 'a':

        cout << "Nombre de proyecto:\t";
        cin >> sTitulo;
        cout << "Numero de partidas de proyecto " << sTitulo << ":\t";
        cin >> iNumPartidas;
        cout << "Descripcion:\t";
        cin >> sDescProyecto;
        for(unsigned int iP = 1; iP <= iNumPartidas; iP++){ 
            string sDescPart;
            vector<Producto> vecProdxP;
            vector<Partida> vectorPartidas;
            cout << endl << "Partida " << iP << ":" << endl;
            cout << "Clave de partida:\t";
            cin >> sPartida;
            cout << "Descripcion de Partida:\t";
            cin >> sDescPart;

            for(unsigned int iPrd = 0; iPrd < iNumProductos; iPrd++){
                cout << endl << "Clave de producto " << iPrd+1 << ":\t";
                cin >> sClave;
            if(sClave != "0"){
                for(int iC = 0; iC < vectorProductos.size(); iC++){
                    //  int index = 0;
                    if(sClave == vectorProductos[iC].getClave()){
                        cout << "Cantidad:\t";
                        cin >> iCantProdxP;
                        file.open("/Users/javiersantisteban/Documents/Prueba/Prueba/ListaDePrecios.txt");
                        while(file >> sID >> sDesc >> sUMed >> sFam >> sClass >> dVolumen >> dLongitud >> sPrecio){
                if(sID == sClave){
                    vecProdxP.push_back(Producto(sID, sDesc, sUMed, sFam, sClass, dVolumen, dLongitud, stringToDouble(sPrecio)));
                                 }
                        }
                        file.close();

                    }
                }
                }else{
                iPrd = iNumProductos;
                }

            }
            vectorPartidas.push_back(Partida(sPartida, sDescPart, vecProdxP));
        }

Класс Партида

#ifndef Partidas_h
#define Partidas_h

#include <iostream>
#include <climits>
#include <string>
#include "Producto.h"

using namespace std;

class Partida{
private:
    string _sPartida, _sDescripcion;//double _dPrecioPartida;
    vector<Producto> _vecProd;

public:
    Partida();
    Partida(string, string, vector<Producto>);
    inline string getClave(){return _sPartida;}
    inline string getProy(){return _sDescripcion;}
    inline void setClave(string sPartida){_sPartida = sPartida;}
    inline void setProy(string sDescripcion){_sDescripcion = sDescripcion;}
    void toString();
};
Partida::Partida(){
_sPartida = "";
_sDescripcion = "";
}
Partida::Partida(string sPartida, string sTitulo, vector<Producto> vecProd){
_sPartida = sPartida;
_sDescripcion = sTitulo;
for(unsigned int i = 0; i < vecProd.size(); i++){
    _vecProd[i] = vecProd[i];
}
}
void Partida::toString(){
cout << "Clave de Partida:\t" << _sPartida << endl;
cout << "Proyecto:\t" << _sDescripcion << endl;
for(unsigned int i = 0; i < _vecProd.size();i++){
    _vecProd[i].toString();
    cout << endl;
}

}

#endif /* Partida_h */

1 Ответ

0 голосов
/ 31 января 2019

У меня проблемы с передачей вектора объекта другому вектору объектов другого типа.

Это не имеет никакого смысла.Что бы вектор объектов одного типа делал с вектором объектов другого типа?

Что я пытаюсь сделать - это создать объект Partidas, который отображает массив или вектор объектов типаProducto, наряду с некоторыми другими атрибутами, но это целые и строковые значения, и у меня нет проблем с ними.

Хорошо, поэтому вам нужен объект, который выполняет некоторые операции над вектором объектов другого типа.Это кажется разумным.

Я знаю, что код немного длинный, но я пытался поставить все в вопрос, так что, надеюсь, вы, ребята, сможете мне помочь.Кроме того, если вы знаете лучший способ сделать то, что я пытаюсь сделать, пожалуйста, дайте мне знать об этом.Это моя первая работа программиста, и я хочу хорошее начало.Спасибо!

Вы не сказали нам, какая у вас проблема.Код не компилируется?Сбои?Работаете, но не делаете то, что хотите?Трудно помочь, не зная, что не так.Но вот удар в темноте:

Partida::Partida(string sPartida, string sTitulo, vector<Producto> vecProd){
_sPartida = sPartida;
_sDescripcion = sTitulo;
for(unsigned int i = 0; i < vecProd.size(); i++){
    _vecProd[i] = vecProd[i];
}
}

Этот код присваивает значения несуществующим объектам.Поскольку _vecProd - пустой вектор, в цикле нет значения _vecProd[0], которому можно присвоить значение.Я не уверен, почему вы идете через искажения только для того, чтобы инициализировать объекты определенными значениями - C ++ имеет простой синтаксис инициализации объекта, используя списки инициализаторов членов .

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