¿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.
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.