¿Qué necesito ingresar en autoexp.dat para poder inspeccionar un miembro de datos de una clase contenida en un vector?

Primero, una disculpa: he leído algunos hilos anteriores sobre la inspección de plantillas en VS (p. Ej. esta); desafortunadamente, no contenían la información que necesito o (lo más probable) no pude extraer la información correctamente de las respuestas. Espero no estar preguntando algo demasiado obvio que se haya preguntado muchas veces antes.

Tengo un vector que contiene objetos de la clase SomeClass:

class SomeClass {
    int a, b;
    //constructor..
};

std::vector<SomeClass> vec;

//vec.push some elements..

Ahora quiero poder ver vec [0] .a, vec [1] .a, .... en el depurador VS2010. Cuando intento esto ingenuamente, obviamente obtengo:

vec[0].a    CXX0058: Error: overloaded operator not found

Y cuando pruebo una de las soluciones que se ofrecen en las respuestas a la pregunta que vinculé anteriormente, obtengo:

((vec)._Myfirst)[0].a   CXX0025: Error: operator needs class/struct/union

Entonces entiendo que necesito modificar autoexp.dat. Intenté hacer esto por un tiempo sin éxito alguno.

Realmente agradecería que alguien pudiera escribir qué línea / s necesito agregar a autoexp.dat para poder inspeccionar estas variables (ya siento que he pasado demasiado tiempo en esto, por lo que lo haría estaría muy agradecido si pudiera obtener una solución explícita en lugar de sugerencias o enlaces).

Gracias por tu tiempo.

preguntado el 05 de febrero de 12 a las 01:02

1 Respuestas

Asegúrate de que SomeClass definirse así:

class SomeClass
{
public:
    SomeClass(int a, int b) : a(a), b(b) { }
    int a, b;
};

Dices que tienes "una matriz de vectores", pero solo tiene el vector de objetos de tipo SomeClass:

std::vector<SomeClass> vec;
SomeClass a(1,2);
vec.push_back(a);
std::cout << vec[0].a;

En este caso, puede acceder a ellos directamente usando el operador de subíndice de matriz ([]). Si está seguro de que hay un objeto en el índice 0, entonces vec[0].a está bien.

Si necesita una matriz de vectores, se vería así:

std::vector<SomeClass> vec[10];
SomeClass a(1,2);
vec[3].push_back(a);
std::cout << vec[3][0].a;

Tu declaras vec como una matriz de 10 vectores y luego empuja un elemento a al final del 4. vector (en el índice 3). Por vec[3][0].a está accediendo al atributo a del elemento en el índice 0 del vector en el índice 3.

El resultado de estos dos ejemplos es: 1

Y para depurar:
En el segundo ejemplo, cuando alterno el punto de interrupción en la línea vec[3].push_back(a);, luego selecciono Debug configuración, luego presiono F5 y cuando se detiene en mi punto de interrupción:

  1. Presione Ctrl + D, Q
  2. Escribe. vec[7] en el campo Expresión
  3. Seleccione Agregar reloj
  4. Vea lo encantador que Visual Studio le muestra el vector en el índice 7 en la ventana Watch 1

Espero que esto ayude

Respondido 05 Feb 12, 10:02

Gracias por su respuesta. En primer lugar, cometí un error tonto al referirme a él como una "matriz de vectores". Por supuesto, me refería a solo un vector. Gracias por detectar esto, edité mi pregunta para reflejar el cambio. Sin embargo, el código sigue siendo el mismo que en la formulación original de mi pregunta. Mi problema es la depuración (en vs10): cuando agrego vec [7] o vec [7] .a (como en su ejemplo) a la lista de vigilancia, aparece el error "CXX0058: Error: operador sobrecargado no encontrado". ¿Funciona bien para usted sin haber realizado ningún cambio en la configuración del depurador? - ama

Si solo tiene un vector simple y está ejecutando su programa en la configuración de depuración, simplemente debe abrir la ventana "Autos" y debe haber un vector vec se muestra correctamente. - Liho

Esto es extraño - ya veo vec pero definitivamente no se muestra correctamente, por ejemplo, si vec.size () == 3, el depurador muestra vec de la siguiente manera: [3]({a=??? b=??? },{a=??? b=???? },{a=??? b=??? }). Entonces me pregunto si esto solo me está sucediendo a mí. Al leer otras publicaciones, pensé que este es el comportamiento estándar del depurador VS para tipos con plantilla, a menos que modifique el depurador para reconocer sus tipos. Quizás lo entendí mal. Intentaré ejecutar el mismo código en otra máquina más tarde. De cualquier manera gracias por tu ayuda! - ama

Eres bienvenido. Le agradecería que aceptara mi respuesta o editara su pregunta y proporcionara más información para que realmente sepa con qué está lidiando. - Liho

¿Qué más información crees que debería añadir? La clase que di como ejemplo no es una versión simplificada de mi problema; el depurador realmente da los códigos de error que escribí en la pregunta (y en mi último comentario aquí) incluso para esta clase simple. Tal vez debería agregar que estoy compilando usando VS2010 en una máquina Win7 x64. - ama

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.