2016-10-25 2 views
-3

私はこのプログラムをコンパイルするときにエラーを修正するのが難しいので、C++を学んでいます。私はint配列のすべての要素を出力できる小さなプログラムを書くつもりです。たとえば、クラスNumberRangeには2つの引数aとbがあり、aが5でbが9の場合、コンストラクタは配列を割り当て、その順序で5,6,7,8,9の値を入力します。私は以下の私のコードを持っている: ヘッドファイルNumberRange.hクラスのインスタンスのメンバーにアクセスするときにエラーが発生する

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

の.ccファイルNumberRange.ccは次のとおりです。

#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); 
} 

そして、私はプログラムのコンパイル時に、私はエラーを得た: cannot refer to type member 'NumberRange' in 'NumberRange' with '->' numberrange->NumberRange (5, 9);

member 'NumberRange' declared here class NumberRange {

エラーの意味とその方法は分かりませんこのプログラムを修正できますか?私は論理が正しいかどうか疑問に思います。誰も私を助けることができるのですか?どうもありがとうございます。

+2

を。 – pingul

+2

基礎を学ぶために本を拾いたいかもしれません:http://stackoverflow.com/q/388242/1025391 – moooeeeep

答えて

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

これは新しいNumberRangeを構成する方法ではありません。あなたは、まだどちらか

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

またはそれ以上の操作を行い、余分なメモリ割り当てを避けることができます:C++内のOOP上の任意のチュートリアルでは、この質問に答えることができる必要があり

NumberRange numberrange(5, 9); 
+0

さらに、あなたのクラスには生ポインタがあります。あなたは、コピーの構築と代入を実装するか、両方の演算子を削除するか、より良い方法として内部的にメモリ管理を扱う 'std :: vector 'を使用する必要があります。 *さらに良いことに、 'a'と' b'を保存し、範囲を実際に作成するのではなく、 'Print'で範囲を印刷するだけです。 –

関連する問題