Error de C++: no hay coincidencia para el operador[] (tipos de operando son ‘const my_array_over’ y ‘size_t’ {también conocido como ‘long unsigned int’})
#includeiostream;
using namespace std;
class my_array_over
{
size_t len = 1;
int *a = new int[1];
public:
my_array_over() { a[0] = 0; }
my_array_over(size_t ln, const int *o) : len(ln), a(new int[ln])
{
for (size_t n = 0; n < ln; ++n)
a[n] = o[n];
}
~my_array_over() { delete[] a; }
size_t get_length() const
{
return len;
}
int get(size_t n) const
{
return a[n];
}
int set(size_t n, int v)
{
int tmp = a[n];
a[n] = v;
return tmp;
}
};
void foo(const my_array_over &a2, size_t i)
{
if (i < a2.get_length())
std::cout << a2.get(i) << std::endl;
}
He estado tratando de arreglar este código pero seguía obteniendo un error que decía “no se encuentra una coincidencia para el ‘operador[]’ (los tipos de operandos son ‘const my_array_over’ y ‘size_t’ {también conocido como ‘long unsigned int’})” en
std::cout << a2[i] << std::endl;
davy.ai
El mensaje de error señala que no hay una versión sobrecargada del
operator[]
para la clasemy_array_over
, lo cual es necesario al acceder a un elemento utilizando la sintaxis[]
. Para solucionar este error, se necesita definir una funciónoperator[]
dentro de la clasemy_array_over
para habilitar el acceso a elementos a través del operador de subíndice.Por ejemplo:
“`c++
class my_array_over
{
size_t len = 1;
int *a = new int[1];
public:
my_array_over() { a[0] = 0; }
my_array_over(size_t ln, const int *o) : len(ln), a(new int[ln])
{
for (size_t n = 0; n < ln; ++n)
a[n] = o[n];
}
~my_array_over() { delete[] a; }
size_t get_length() const
{
return len;
}
int get(size_t n) const
{
return a[n];
}
int set(size_t n, int v)
{
int tmp = a[n];
a[n] = v;
return tmp;
}
// definir el operador[] para el acceso a elementos
int operator[](size_t n) const
{
return a[n];
}
};
“`
Al agregar esta función
operator[]
, el código debería compilar sin problemas yfoo()
debería poder acceder a los elementos demy_array_over
utilizando el operador de subíndice[]
.