es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error señala que no hay una versión sobrecargada del operator[] para la clase my_array_over, lo cual es necesario al acceder a un elemento utilizando la sintaxis []. Para solucionar este error, se necesita definir una función operator[] dentro de la clase my_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 y foo() debería poder acceder a los elementos de my_array_over utilizando el operador de subíndice [].

Comments are closed.