2016-10-25 13 views
-3

Ich lerne C++, so ist es schwer für mich, die Fehler zu beheben, die ich habe, wenn ich dieses Programm kompiliere. Ich werde ein kleines Programm schreiben, das alle Elemente in einem int-Array ausgeben kann. Zum Beispiel hat die Klasse NumberRange zwei Argumente a und b, wenn a 5 ist und b 9 ist, dann würde der Konstruktor ein Array zuweisen und es mit den Werten 5, 6, 7, 8, 9 in dieser Reihenfolge füllen. Ich habe meinen Code folgende: der Kopf NumberRange.hFehler beim Zugriff auf Mitglieder einer Instanz einer Klasse

class NumberRange { 
public: 
    NumberRange(int a, int b); 
    virtual ~NumberRange(); 
    void Print(int a, int b); 
private: 
    int *range_; 
    int size; 
}; 

Die .cc Datei Datei NumberRange.cc ist:

#include <iostream> 
#include "numberrange.h" 
using namespace std; 

NumberRange::NumberRange(int a, int b) { 
    if (a > b) { 
     cout << "a must be equal or less than b" << endl; 
    } 
} 

NumberRange::~NumberRange() { 
    //implementation 
} 

void NumberRange::Print(int a, int b) { 
    this->size = b - a + 1; 
    this->range_[0] = a; 
    for (int i = 0; i < this->size; i++) { 
     this->range_[i] = a + i; 
     cout << this->range_[i] << endl; 
    } 
} 

int main() { 
    NumberRange *numberrange; 
    numberrange->NumberRange (5, 9); 
    numberrange->Print(5,9); 
} 

Und ich habe die Fehler, wenn ich das Programm zu kompilieren: cannot refer to type member 'NumberRange' in 'NumberRange' with '->' numberrange->NumberRange (5, 9);

member 'NumberRange' declared here class NumberRange {

Ich weiß nicht, die Fehler Bedeutung und wie Kann ich dieses Programm reparieren? Ich frage mich, ob die Logik richtig ist oder nicht. Kann mir jemand helfen? Ich danke dir sehr.

+2

Jede Tutorial über OOP in C++ sollte diese Frage beantworten können. – pingul

+2

Sie möchten vielleicht ein Buch aufheben, um die Grundlagen zu lernen: http://StackOverflow.com/q/388242/1025391 – moooeeeep

Antwort

1
NumberRange *numberrange; 
numberrange->NumberRange (5, 9); 

Dies ist nicht, wie Sie ein neues NumberRange konstruieren. Sie können entweder

NumberRange *numberrange = new NumberRange(5, 9); 

tun Oder noch besser, die überflüssige Speicherzuordnung vermeiden:

NumberRange numberrange(5, 9); 
+0

Zusätzlich hat Ihre Klasse einen rohen Zeiger. Entweder müssen Sie den Aufbau und die Zuweisung von Kopien implementieren oder beide Operatoren löschen, oder besser noch intern verwenden Sie einen 'std :: vector ', der die Speicherverwaltung für Sie übernimmt. * Besser noch * wäre, nur "a" und "b" zu speichern, und dann den Bereich in "Drucken" zu drucken, anstatt tatsächlich den Bereich zu erstellen. –

Verwandte Themen