Jestem zdezorientowany: Myślałem, że chronione dane zostały odczytane/zapisane przez dzieci danej klasy w C++.Chronione dane w klasie nadrzędnej niedostępne w klasie podrzędnej?
Poniższy fragment nie skompilować w MS Compiler
class A
{
protected:
int data;
};
class B : public A
{
public:
B(A &a)
{
data = a.data;
}
};
int main()
{
A a;
B b = a;
return 0;
}
komunikat o błędzie:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
demoFail.cpp
demoFail.cpp(12) : error C2248: 'A::data' : cannot access protected member declared in class 'A'
demoFail.cpp(4) : see declaration of 'A::data'
demoFail.cpp(2) : see declaration of 'A'
Co robię źle?
Umph. Mówiąc dokładniej, ten przypadek jest jedynie fałszywym przykładem, aby zademonstrować problem. Tak naprawdę chciałem zrobić dość intensywny odczyt danych, które są przekazywane. –
W każdym razie możesz zmarnować tylko z chronionymi danymi w części A tego lub innego obiektu B. Jeśli masz instancję klasy A lub instancję C, która również wywodzi się z A, B nie ma specjalnych uprawnień do tych jako. Jeśli nie możesz skorzystać z tej porady (utwórz tę część B, kopiując ją jako podstawową część tego B, do której masz dostęp), możesz mieć problem z projektowaniem, który może wymagać większego obrazu odpowiedź. – UncleBens
@rlbond: Kodowanie po snu ponownie uderza. To rozwiązało mój problem. Dzięki. :) –