/przeciążenia Mam klasy, który wygląda mniej więcej tak:Kłopoty z const const rozdzielczości
class ClassA
{
public:
float Get(int num) const;
protected:
float& Get(int num);
}
Poza klasy I wywołania funkcji get().
float foo = classAInstance.Get(i);
Oczekuję tego, aby zadzwonić do publicznej wersji, ale błędy zamiast Visual Studio OUT:
error C2248: 'ClassA::Get' : cannot access protected member declared in class 'ClassA'
Kiedy zakomentowanie chronionego przeciążenie i usuwając wszelkie odniesienia do niego, kod kompiluje.
Dlaczego kompilator próbuje użyć elementu niedostępnego, gdy dostępny jest dostępny? Czy istnieje zaakceptowany sposób zmuszenia kompilatora do wyboru właściwego przeciążenia? Czy jest gdzieś odniesienie do reguł rozdzielczości dla funkcji członka?
Przykład wydaje się niebezpieczny. Biorąc pod uwagę 'string func();' i wyrażenie 'Blah b (func())' skompiluje i nadal będzie wyświetlać zwisające odwołanie. Oto moja zasada: * Nigdy * nie zachowuj parametrów "const &".Co mówisz? –
@MartinBa: Na pewno chciałbyś również 'Blah (string &&) = delete;' –
Hm. Pojawia się wtedy pytanie, czy nadal konieczne jest ładowanie "const char". czy parametr "char *" łączy się z 'string const &' lub z 'string &&' version? :-) –