我有2个数组的“指向对象的指针”的奇怪问题(通过查看代码,我是否正确?)
我确实读过很多文章,试图掌握关于我要做什么的知识,但是这个错误变得势不可挡,我真的想知道为什么会这样。
对于我可以从此行上弹出的错误中看到的内容:
vec_cliente[i] = new Cliente(nombre,apellido,carne,fecha); //this pops the error
是我正在尝试将新的Cliente放在vec_cliente [i](0)处,但不存在。
但是...这
vec_solicitudes[i] = new Casa_Profesor(carne, fecha_sol, costo_mant, costo_alquiler, cant_p,salon);
运行良好o.0
Principal.h具有:
#pragma once
#include string>
#include vector>
#include "Cliente.h"
#include "Persona.h"
#include "Casa_Profesor.h"
using namespace std;
class Principal{
private:
Cliente ** vec_cliente;
Casa_Profesor ** vec_solicitudes;
public:
static string info [];
static string miembros [];
Principal(void);
void cargar(void);
void calular_mayor_solicitudes(Cliente* vec_cliente, Casa_Profesor* vec_solicitudes);
void mayor_costo(void);
void ingreso_total(void);
void espacio_mayor_uso(void);
virtual ~Principal(void);
};
Principal.cpp具有:
#include "StdAfx.h"
#include "Principal.h"
#include iostream>
#include string>
#include sstream>
#include vector>
#include iterator>
using namespace std;
string Principal::info[] = {"623 25-05-2010 625.00 850.50 190 1"
,"199 24-01-2009 300 900.5 180 1"
,"199 24-01-2010 300.50 900 175 2"
,"201 24-01-2009 300 900.5 180 3"
,"201 24-01-2010 300.50 900 175 3"
,"201 24-01-2009 30 900.5 180 3"
,"201 24-01-2010 300.50 900 175 3"
,"404 24-01-2009 300 900.5 180 3"
,"404 24-01-2010 300.50 900 175 2"
,"404 24-01-2009 30 900.5 180 3"
,"404 24-01-2010 300.50 900 175 2"
,"404 24-01-2009 300 90.5 180 3"
,"505 24-01-2010 300.50 900 175 2"
,"505 24-01-2009 300 900.5 180 3"
,"505 24-01-2010 300.50 900 175 2"
,"505 24-01-2009 300 90.5 180 1"
,"505 24-01-2010 300.50 900 175 1"
,"505 24-01-2009 300 900.5 180 3"
,"505 24-01-2010 1300.50 900 175 2"
,"106 24-01-2009 300 900.5 180 3"
,"106 24-01-2010 300.50 900 175 3"
,"106 24-01-2009 300 900.5 180 3"
,"106 24-01-2010 300.50 900 175 3"};
string Principal::miembros[] = {"Jaime Perez 623 22 12 1998"
,"Maria Perez 199 02 12 1988"
,"Jose Castro 201 3 11 2008"
,"Juan Caceres 404 21 1 2007"
,"Carla Vivas 505 18 09 1990"
,"Daniela Ochoa 106 02 01 2010"};
Principal::Principal(void)
{
}
void Principal::cargar(){
int i = 0, carne = 0, cant_p = 0, salon = 0;
string nombre, apellido, fecha, aux, fecha_sol;
double costo_mant, costo_alquiler;
vec_solicitudes = new Casa_Profesor * [(sizeof(info)/sizeof(string))*sizeof(Casa_Profesor)];
for (i = 0; i < (sizeof(info)/sizeof(string)); i++){
istringstream stream(info[i],ios_base::in);
stream >> aux;
carne = atoi(aux.c_str());
stream >> fecha_sol;
stream >> aux;
costo_mant = atof(aux.c_str());
stream >> aux;
costo_alquiler = atof(aux.c_str());
stream >> aux;
cant_p = atoi(aux.c_str());
stream >> aux;
salon = atoi(aux.c_str());
vec_solicitudes[i] = new Casa_Profesor(carne, fecha_sol, costo_mant, costo_alquiler, cant_p,salon); //THIS runs fine
}
vec_cliente = new Cliente * [(sizeof(miembros)/sizeof(string))*sizeof(Cliente)];
for (i = 0; i < (sizeof(miembros)/sizeof(string)); i++){
istringstream stream(miembros[i],ios_base::in);
stream >> nombre;
stream >> apellido;
stream >> aux;
carne = atoi(aux.c_str());
stream >> fecha;
fecha.append(" ");
stream >> aux;
fecha.append(aux);
fecha.append(" ");
stream >> aux;
fecha.append(aux);
vec_cliente[i] = new Cliente(nombre,apellido,carne,fecha); //THIS trows the exception
}
}
/ * Casa_Profesor和Cliente之间的唯一区别是Cliente继承自Persona类,而Casa_Profesor没有。
至于为什么这段代码这么奇怪:这是一种编程实践,但是可以随时指出我在此代码中犯的任何其他编程错误(特别是关于sizeof的东西)
另外,我可以编辑和发布所有有关clases的代码,但是我想首先看看someoe是否可以指出我可能犯的一个明显的新手错误。
预先感谢您的任何帮助* /
最佳答案
我不确定为什么当您不使用任何向量,仅使用原始指针和数组时,为什么会得到“向量下标超出范围”。我以为您没有告诉我们什么!
因此,我将对您的代码进行一些随机注释:
vec_solicitudes = new Casa_Profesor * [(sizeof(info)/sizeof(string))*sizeof(Casa_Profesor)];
您是否要在vec_solicitudes中为信息中的每个字符串创建1个Casa_Profesor *?如果是这样,您要:
vec_solicitudes = new Casa_Profesor * [sizeof(info)/sizeof(string)];
这将为(sizeof(info)/ sizeof(string))(Casa_Profesor *)分配足够的内存。
同样地:
vec_cliente = new Cliente * [sizeof(miembros)/sizeof(string)];
但是,您的分配太大而不是太小,因此它们不是异常的原因。我建议您改为查看Casa_Profesor和Cliente构造函数-它们可能是异常发生的地方。
关于c++ - “vector 下标超出范围”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6944813/