我无法将一个对象的向量传递给另一个不同类型的对象的向量。我正在尝试做的是使对象Partidas显示Producto类型的对象的数组或向量,以及一些其他属性,但这些属性是整数和字符串,而我对此没有问题。当我运行程序时,按“ 0”完成las循环后,它标记为错误访问。我知道代码有点长,但是我试图将所有问题都放在问题中,以便希望大家能帮助我。另外,如果您知道做我想做的更好的方法,请告诉我。谢谢!
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));
}
Partida类
#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 */
答案 0 :(得分:1)
我无法将一个对象向量传递给另一个不同类型的对象向量。
那真的没有任何意义。一种类型的对象向量与另一种类型的对象向量有什么作用?
我要做的是使对象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 ++使用member initializer lists具有简单的对象初始化语法。