2017-12-20 3 views
0

Ich lerne C++ und versuche, eine einfache Matrix-Klasse zu konstruieren. Der grundlegende Fall habe ich definiert die Matrix-Klasse wie:Einfache Matrix-Klasse, Fehler: Aufruf des privaten Konstruktors

class Matrix { 
    int r; // number of rows 
    int c; // number of columns 
    double* d; // array of doubles to hold matrix values 
    Matrix(int nrows, int ncols, double ini = 0.0); 
    ~Matrix(); 
} 

Und Konstruktor/Destruktor sind:

Matrix::Matrix(int nrows, int ncols, double ini) { 
    r = nrows; 
    c = ncols; 
    d = new double[nrows*ncols]; 
    for (int i = 0; i < nrows*ncols; i++) d[i] = ini; 
} 
Matrix::~Matrix() { 
    delete[] d; 
} 

Problem: wenn ich die Klasse Matrix instanziiert von Matrix my_matrix(2,3) Aufruf, erhalte ich die folgende Fehler: error: calling a private constructor of class 'Matrix', error: variable of type 'Matrix' has private destructor.

Frage: Warum passiert das? Wie kann ich verstehen, was scheitert? Könnte jemand mich auf die Lösung/das Lesematerial hinweisen, um mir zu helfen, dieses Problem zu verstehen. Danke fürs Helfen!

+2

Du für mehr Schmerzen werden durch Zeiger statt 'std :: vector d verwendet;' – PaulMcKenzie

+0

@PaulMcKenzie Ich verfolge ein Buch über C++ und Finanzen (durch Schlogl), könnte es veraltet sein. Danke, dass du das unterstrichen hast! –

+0

Ich weiß nicht, ob es veraltet ist oder nur veralteten Lehrstil verwendet. Was Sie jetzt haben, ist für eine Matrix-Klasse nicht geeignet, wenn Sie mit dem Kopieren, Zurückgeben oder Übergeben von Matrix-Objekten beginnen möchten. Lesen Sie die Regel 3/5/0 nach. – PaulMcKenzie

Antwort

2

Standardmäßig ist der Zugriff auf Eigenschaften/Methoden einer Klasse privat. Fügen Sie eine public: Anweisung in Ihrer Klasse:

class Matrix { 
    int r; // number of rows 
    int c; // number of columns 
    double* d; // array of doubles to hold matrix values 
public:  
    Matrix(int nrows, int ncols, double ini = 0.0); 
    ~Matrix(); 
} 
Verwandte Themen