tengo una clase que se ve algo como esto:Problemas con const resolución/no constante sobrecarga
class ClassA
{
public:
float Get(int num) const;
protected:
float& Get(int num);
}
fuera de la clase, que llamo la función get().
float foo = classAInstance.Get(i);
me esperaba esto para llamar la versión pública, pero los errores en lugar de Visual Studio salida:
error C2248: 'ClassA::Get' : cannot access protected member declared in class 'ClassA'
Al comentar la sobrecarga protegida y la eliminación de todas las referencias a ella, el código se compila.
¿Por qué el compilador intenta usar el miembro inaccesible cuando uno accesible está disponible? ¿Hay una forma aceptada de forzar al compilador a elegir la sobrecarga correcta? ¿Hay alguna referencia a las reglas de resolución para las funciones miembro en alguna parte?
El ejemplo parece peligroso. Dado 'string func();' y una expresión de 'Blah b (func())' se compilará y aún dará como resultado una referencia colgante. Mi regla aquí es: * Nunca * retener los parámetros 'const &'.¿Qué dices? –
@MartinBa: Ciertamente también querría 'Blah (string &&) = delete;' –
Hm. Y la pregunta entonces se convierte si la carga de 'const char' todavía se requiere en absoluto. ¿el parámetro 'char *' se uniría a la versión 'string const &' o a la versión 'string &&'? :-) –