Gegeben 2 Klassen:Wie kann ich einen Kompilierungsfehler bei versehentlicher Konstruktion bekommen?
...
class Grades{
public:
Grades(int numExams) : _numExams(numExams){
_grdArr = new double[numExams];
}
double GetAverage() const;
...
private: // The only data members of the class
int _numExams;
double *_grdArr;
};
class Student{
public:
Student(Grades g) : _g(g){
}
...
private: // The only data members of the class
Grades _g;
};
...
Und ein kurzes Hauptprogramm:
int main(){
int n = 5; // number of students
Grades g(3); // Initial grade for all students
// ... Initialization of g – assume that it's correct
Student **s = new Student*[n]; // Assume allocation succeeded
for (int it = 0 ; it < n ; ++it){
Grades tempG = g;
// ... Some modification of tempG – assume that it's correct
s[it] = new Student(tempG);
}
// ...
return 0;
}
Dieser Code funktioniert gut. Aber durch Tippfehler Fehler der Linie:
Grades tempG = g;
hat sich geändert:
Grades tempG = n;
und es geht immer noch die Zusammenstellung. Welche einfache Änderung kann ich im code (dem main() code) machen, um einen Kompilierungsfehler durch diesen Tippfehler zu bekommen?
In diesem Kontext muss "new" nicht verwendet werden. Sie sollten lieber Stack-Variablen (automatische oder feste Lebensdauer) verwenden, keine Heap-Variablen (dynamische Lefetime-Variablen). Suche std :: vector nach. –