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.

¿Cómo devolver un arreglo privado en un método get público en C++?

Estoy tratando de hacer una función de obtener miembro público que devuelva la variable privada “emp”. Pero obtengo un error en mi función de obtener que dice:

“El tipo de valor de retorno no coincide con el tipo de función”.

Sé que en C++ el tipo de retorno no puede ser un arreglo, sino que debe ser un puntero a un arreglo. Pero solo estoy devolviendo el nombre del arreglo, que debería ser la dirección del primer elemento.

    class DB {

private:
    static const int SIZE = 13;
    Employee* emp[SIZE];

public:
    DB();
    void print(Employee*[], const int);
    Employee* get_emp_arr();
    const int get_emp_arr_size();
}

Employee* DB::get_emp_arr(){
        return this->emp;
    }

He encontrado una solución para mi mensaje de error, pero me gustaría una explicación. Simplemente cambiando el tipo de retorno a “Employee**”, “this->emp” es aceptado como un tipo de retorno.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual cambiar el tipo de retorno a “Employee” resuelve el mensaje de error es porque “this->emp” es un puntero a un array de punteros a objetos de tipo Employee. Al cambiar el tipo de retorno a “Employee“, estás indicando que la función retornará un puntero a un puntero a objetos de tipo Employee, lo cual es el tipo correcto para “this->emp”.

    En C++, el nombre de un array puede ser convertido implícitamente a un puntero a su primer elemento. Sin embargo, cuando tienes un array de punteros, el nombre del array en sí es un puntero a un puntero. Por lo tanto, necesitas tener un tipo de retorno que coincida con el tipo puntero-puntero del nombre del array.

    Al utilizar “Employee**” como el tipo de retorno, estás diciendo que la función retornará un puntero a un puntero a objetos de tipo Employee (es decir, un puntero al primer elemento en el array de punteros). Esto coincide con el tipo de “this->emp”, que es un puntero a un puntero a objetos de tipo Employee.

Comments are closed.