Ich habe eine sehr allgemeine Frage bezüglich des folgenden Fehlers und ich danke im Voraus für jeden hilfreichen Kommentar. Ich habe meine Codierung vereinfacht, um auf den Fehler hinzuweisen, den ich erhalten habe. (Ich habe einen Fehler, wenn ich versuche, auf Objekt und Variablen der Elternklasse innerhalb der Unterklasse Mitglied Funktion zuzugreifen. Ich schrieb die Zusammenfassung des Fehlers in den Kommentar) Angenommen, ich habe den folgenden Code.Vererbung mit Vorlage (Zugreifen auf Variable und Objekt der Elternklasse innerhalb der Unterklassenmitgliedsfunktion)
//here is the parent class
template<class T, int m, int n>
class A{
protected:
vector<vector<T>> elements;
int nrow;
int ncol;
public:
A();
}
A<T,m,n>::A():nrow(m),ncol(n){
for (int i = 0; i < nrow; i++){
vector<T> row(ncol, 0);
elements.push_back(row);
}//this is a constructor to assign MxN zero matrix
//here is the child class and member function assign() and pow()
template<class T, int n>
class B:public A<T,n,n>{
B();
B<T,n> assign();
}
template<class T, int n>
B<T, n>::B() : A<T, n, n>(){}//a constructor of child class for NxN square matrix
template<class T, int n>
B<T,n> B<T,n>::assign(){
A<T,n,2*n> a;
for (int i = 0; i < nrow; ++i){
for (int j = 0; j < ncol; ++j){
//this causes error saying that "Error 1 error C2248:'A<T,3,3>::elements' : cannot access protected member declared in class 'A<T,3,3>'"
a.elements[i][j] = elements[i][j];
}
}
b.elements[0][0] = a.elements[0][0];
return b;
}
Wenn meine Codierung nicht ausreichend ist, meine Frage zu beantworten. Ich kann alle Details zur Verfügung stellen. Mein oberstes Ziel ist es, Nx2N matrix.a zu machen und die Elemente der NxN-Matrix in die linke Hälfte von matrix.a einzufügen und einige Berechnungen innerhalb der Elementfunktion assign() durchzuführen. (Oder ist das überhaupt möglich ?????) In main.cpp habe ich 3x3-Matrix aufgerufen.
Vielen Dank für den Kommentar !! Um das Problem zu beheben, habe ich die gesamte Klassenstruktur neu gestaltet? Gibt es einen Weg, mein Ziel mit der Vererbung zu erreichen? – SungwonAhn
"Redesign" bedeutet nicht "Vererbung nicht verwenden". Sie müssen lediglich zusätzliche Methoden in der Oberklasse und der Unterklasse mit geeigneten Zugriffsebenen definieren und implementieren, mit denen Sie das tun können, was Sie tun möchten. –