> Una vez creada a estructura de includes (descendentemente): > Astring ==> Tdef ==> ADH_lst2 ==> ADH_map ==> Tarea05 > en el procedimiento ADH_lst2::printlist() me da un error al utilizar el > operador *. Recuerdo que algo al respecto nos había mencionado ud, pero > en este momento no logro solucionarlo. Creo que la "estructura de #includes" más bién es ésta: Tarea05.cpp ==> ADH_map.h ==> ADH_lst2.h ==> Tdef.h ==> Astring.h pues hay un "#include ADH_map.h" en Tarea05.cpp, etc. Si el compilador NO encuentra la sobrecarga para op*() seguramente es porque NO la has programado. Si tenés un iterador para la clase ADH_map, ¿que sería lo que retorna? Lo lógico es que con esos iteradores sea posible extraer los campos asociados a la llave... ¿Cierto? Pero las cosas no son así... Si te fijás en el ejemplo Fig. 20.22 (2.da edición Dietel) verás que un iterador que recorre un dicionario "map<>" retorna la referencia a pareja de valores: typedef std::map< int, double, std::less< int > > mid; mid pairs; // ... for ( iter = pairs.begin(); iter != pairs.end(); ++iter ) { cout << iter->first << '\t' << iter->second << '\n'; } En este ejemplo, el "typedef" para lo que sirve es para no tener que escribir a cada rato el "ferrocarril" de declaraciones del diccionario... > Al utilizar cout << *p dice: "Illegal structure operation", creo > entender que lo que sucede es que se pretende, utilizando el operador > *, es escribir el valor contenido en la variable _val de la clase > nodo, pero como este es una clase, se debe corregir dicha > implementación. Si no existe op*(), a la derecha de "cout" lo que está es un CHUNCO-ROTO, por lo que "op<<()" en su segundo argumento tiene un objeto inválido. Podés sobrecargar ADH_map::iterator::op*() y todo se arregla. > Intento, desde la implementación del operador *, decir (como prueba) > que me imprima el valor de una única variable de clase Astring, por > ejemplo second, utilizando el código "return _p->_val.first", pero me > da el siguiente error: "Reference initializated with 'Astring', needs > lvalue of type 'pair'", y si lo hago con "return _p->_val.second" me > dice: "Reference initializated with 'int', needs lvalue of type > 'pair'". Recuerdo que algo tenía que ver con la inicialización de los > valores de dichas variables, pero no logro precisar una solución. NOppp... La gracia es hacerlo como lo hacde Deitel: el programador cliente "sabe" que el diccionario está hecho de "parejitas" (pair), cuyos campos son 2.... "first" y "second". > Espero que pueda orientarme en el caso. Espero haberlo hecho. De todas formas, lo veremos de nuevo en clase. Les adjunto el ejemplo de la figura 20.22 de Deitel. // Fig. 20.22: fig20_22.cpp // Testing Standard Library class map #include using std::cout; using std::endl; #include int main() { typedef std::map< int, double, std::less< int > > mid; mid pairs; pairs.insert( mid::value_type( 15, 2.7 ) ); pairs.insert( mid::value_type( 30, 111.11 ) ); pairs.insert( mid::value_type( 5, 1010.1 ) ); pairs.insert( mid::value_type( 10, 22.22 ) ); pairs.insert( mid::value_type( 25, 33.333 ) ); pairs.insert( mid::value_type( 5, 77.54 ) ); // dupe ignored pairs.insert( mid::value_type( 20, 9.345 ) ); pairs.insert( mid::value_type( 15, 99.3 ) ); // dupe ignored cout << "pairs contains:\nKey\tValue\n"; mid::const_iterator iter; for ( iter = pairs.begin(); iter != pairs.end(); ++iter ) cout << iter->first << '\t' << iter->second << '\n'; pairs[ 25 ] = 9999.99; // change existing value for 25 pairs[ 40 ] = 8765.43; // insert new value for 40 cout << "\nAfter subscript operations, pairs contains:" << "\nKey\tValue\n"; for ( iter = pairs.begin(); iter != pairs.end(); ++iter ) cout << iter->first << '\t' << iter->second << '\n'; cout << endl; return 0; } /************************************************************************** * (C) Copyright 2000 by Deitel & Associates, Inc. and Prentice Hall. * * All Rights Reserved. * * * * DISCLAIMER: The authors and publisher of this book have used their * * best efforts in preparing the book. These efforts include the * * development, research, and testing of the theories and programs * * to determine their effectiveness. The authors and publisher make * * no warranty of any kind, expressed or implied, with regard to these * * programs or to the documentation contained in these books. The authors * * and publisher shall not be liable in any event for incidental or * * consequential damages in connection with, or arising out of, the * * furnishing, performance, or use of these programs. * *************************************************************************/