Bienvenido(a), Visitante. Favor de ingresar o registrarse.
Diciembre 02, 2008, 12:57:12
Inicio Ayuda Buscar Ingresar Registrarse
Noticias: Foro de Java, C++ y más.

Nuevo foro de Control de versiones.

+  Foros Java y C/Linux
|-+  Programación
| |-+  C/C++ linux
| | |-+  sobrecarga del operador []
« anterior próximo »
Páginas: [1] Enviar tema Imprimir
Autor Tema: sobrecarga del operador []  (Leído 320 veces)
latino2
Newbie
*
Mensajes: 3


Ver Perfil


« en: Junio 04, 2008, 04:14:10 »

Hola a todos:
Tengo un problema cuando intento sobrecargar el operador [].
Tengo un archivo de cabecera donde declaro mi nuevo tipo de dato (my_type)
___________________________
// file my_type.h
class my_type
{
public:
.
.
my_type operator[] (my_type);
my_type operator= (my_type);
.
.
};
_____________________________

En el archvio cc defino los operadores sobrecargados
_____________________________
//file my_type.cc

#include "my_type.h"
//Operator overload
my_type my_type::operator[] (my_type)
{
.
.
}
my_type my_type::operator= (my_type)
{
.
.
}
_____________________________

Cuando intento usar los nuevos operadores
_____________________________

// file functionXX

#include "my_type.h"
.
.
my_type vector[10];
my_type q,p;
.
.
q=vector[p]; **
_____________________________

Obtendo el siguiente error en la línea **

error C2677: '[' binary : no global operator found which takes type 'type' (or there is no acceptable conversion)

Alguien sabe cómo solucionar el error.

Gracias anticipadas
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #1 en: Junio 04, 2008, 04:35:36 »

Hola:

El operator[] debe admitir como parámetro un entero, que es el que hace de índice. También tienes que probar/revisar, porque quizas el tipo que se devuelva deba ser por referencia

my_type &operator [] (int indice)

si lo lo declaras exactamente igual a como lo espera, luego no lo encontrará y te dará el error que te está dando ahora.

Se bueno.
En línea

latino2
Newbie
*
Mensajes: 3


Ver Perfil
« Respuesta #2 en: Junio 04, 2008, 04:40:29 »

Hola:

El operator[] debe admitir como parámetro un entero, que es el que hace de índice. También tienes que probar/revisar, porque quizas el tipo que se devuelva deba ser por referencia

my_type &operator [] (int indice)

si lo lo declaras exactamente igual a como lo espera, luego no lo encontrará y te dará el error que te está dando ahora.

Se bueno.

Pero según tengo entendido de eso se trata la sobrecarga, de que no trabaje con un entero sino con el nuevo tipo de dato que yo declaro.
Gracias

En línea
webo_cs
Full Member
***
Mensajes: 130


En la lucha..

ma_cs_i@hotmail.com
Ver Perfil WWW Email
« Respuesta #3 en: Junio 04, 2008, 05:38:14 »

HOla!

La idea de la sobrecarga, es poder utilizar los operadores convenvionales en un tipo definido por el usuario, es decir que no tengas que crear por ejemplo, en una lista enlazada un metodo Lista.recuperarElem(int pos) y puedas hacer directamente Lista[pos] ...

Saludos!
En línea

chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #4 en: Junio 04, 2008, 05:40:57 »

Hola de nuevo:

¿En qué línea del código te da el error? ¿Puedes escribirla aquí?

Se bueno.
En línea

latino2
Newbie
*
Mensajes: 3


Ver Perfil
« Respuesta #5 en: Junio 04, 2008, 05:49:55 »

Hola de nuevo:

¿En qué línea del código te da el error? ¿Puedes escribirla aquí?

Se bueno.

Es la última línea, lo indico en el código, la marcada con dos asteriscos **
Gracias
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #6 en: Junio 04, 2008, 07:00:55 »

Hola de nuevo:

En la línea del error, vector[] es el array, no el elemento, por lo que debes poner

vector[indice];   // esto sí es un m_type

eso será un m_type y ahora quizás si puedas usar el operator[] que has redefinido

vector[indice][m_type]

Se bueno.
En línea

Páginas: [1] Enviar tema Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by MySQL Powered by PHP Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC XHTML 1.0 válido! CSS válido!