Programación General > Visual C++

 Utilizar extern con una matriz dinamica de texto

(1/2) > >>

kaito:
Saludos.

El siguiente código:


--- Código: C++ ---#include <iostream>#include <string> using namespace std; extern char *cadena; void funcion() {   char (*cadena)[10]=new char [2][10];   strcpy (cadena[0],"Uno");   strcpy (cadena[1],"Dos");} void main () {   funcion();   cout << cadena[0] << endl;   cout << cadena[1] << endl;} 
Genera el siguiente error de compilación: error LNK2001: símbolo externo "char * cadena" (?cadena@@3PADA) sin resolver.
                                                              fatal error LNK1120: 1 externos sin resolver

En el código que estoy desarrollando, la función se encargaria de leer las cadenas de texto de un archivo. El primer dato del archivo es un valor entero que indica el número de cadenas en el archivo y será utilizado para declarar la dimensión de la matriz de memoria dinámica.

He buscado en varios libros y sitios webs pero no he visto ningun ejemplo parecido. Gracias de antemano.

Eternal Idol:
¿Tenes otro modulo de codigo (.c/.cpp)? La declaracion con extern hace que el enlazador busque ese simbolo en otro modulo sino era esa la intencion sacalo, extern se suele usar en las cabeceras (.h) para compartir un simbolo entre modulos, el modulo que lo define no lo debe llevar.

kaito:

--- Cita de: "Eternal Idol" ---extern se suele usar en las cabeceras (.h) para compartir un simbolo entre modulos
--- Fin de la cita ---

Gracias por contestar.

Mi intención es poder utilizar la matriz de memoria dinámica local de la función en el bloque principal main, si es posible.

Efectivamente, he visto la utilización de la sentencia extern en un archivo de cabecera. Entendí en la ayuda de VC++ y por el ejemplo, que se utilizaba para hacer global una variable local o declarada en otro lugar del código o  función.

No sé si se puede convertir una variable de memoria dinámica (matriz) local en global.

En los código que he encontrado, se ha utilizado variables o incluso estructuras de memoria estática , declaradas al inicio del código y posteriormente utilizadas en una función encargada de realizar algún proceso del programa.

Pero con matrices de memoria dinámica, no.


Saludos.

Eternal Idol:
El extern ahi no te sirve de nada, sacandolo tendras un puntero a char y su ambito sera todo el modulo.

kaito:

--- Cita de: "Eternal Idol" ---El extern ahi no te sirve de nada, sacandolo tendras un puntero a char y su ambito sera todo el modulo.
--- Fin de la cita ---

He compilado el código:


--- Código: C++ --- #include <iostream>#include <string> using namespace std; char *cadena; void funcion() {   int VariableIndice=2;   char (*cadena)[10]=new char [VariableIndice][10];   strcpy (cadena[0],"Uno");   strcpy (cadena[1],"Dos");} void main () {   funcion();   cout << cadena[0] << endl;   cout << cadena[1] << endl;}  
Y produce error de ejecución: Excepción no controlada en 0x0......:Infracción de acceso al leer la ubicación 0x000000000.

Intento mostrar el texto asignado a cadena en la funcion, desde la funcion principal main como si fuera una variable global.

Entiendo, que la matriz dinámica deja de ser visible al finalizar funcion();, como debería declarar la matriz dinámica para que fuera visible desde main.

Saludos.


PD.: Por favor, eliminen los dos mensajes anteriores, he pulsado el botón citar, en lugar de editar. :comp:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa