2011-12-07 4 views
0

私は、アスキー文字で図形を描き、画面全体に移動させるプログラムを書くという宿題をしています。この例では、すでに描画された円を移動するメソッドを記述しようとしています。私は私のdrawCircleメソッドが動作することを知っていますが、私はmoveCircleメソッドでdrawCircleメソッドを呼び出そうとすると何も出力しません。C++でクラス内のメソッドを効果的にどのように使用しますか?

void CircleType::drawCircle() const{ 
    for (int i = 0; i < NUMBER_OF_ROWS; i++) { 
     for(int j = 0; j < NUMBER_OF_COLUMNS; j++) { 
      int p = abs (x - j); 
      int q = abs (y - i); 
      int distance = pow(p, 2) + pow(q, 2); 
      int realDistance = pow(radius, 2); 
      if (abs(realDistance - distance) <= 3){ // I tested out several values here, but 3 was the integer value that consistently produced a good looking circle 
       drawSpace[i][j] = symbol; 
      } 
     } 
    } 
    displayShape(); 
    return; 
} 




bool CircleType::moveCircle(int p, int q){ 
    if (p - radius < 0 || p + radius > NUMBER_OF_COLUMNS){ 
     cout << "That will move the circle off the screen"<< endl; 
     return false; 
    } 
    else if (q - radius < 0 || q + radius > NUMBER_OF_ROWS){ 
     cout << "That will move the circle off the screen"<< endl; 
     return false; 
    } 
    else{ 
     x = p; 
     y = q; 
     for (int m = 0; m < NUMBER_OF_ROWS; m++){ 
      for(int n = 0; n < NUMBER_OF_COLUMNS; n++){ 
       if (drawSpace[m][n] == symbol) 
        drawSpace[m][n] = ' '; 
      } 
     } 
     void drawCircle(); 
     return true; 
    } 

} 

drawSpace形状のASCII文字を保持する2D char配列であり、そしてdisplayShapeは、2次元アレイをプリントアウトする機能です。上で述べたように、drawCircle関数は機能しますが、moveCircleメソッドは機能しません。私がmoveCircleでそれを使用しようとすると、drawCircleメソッドを間違って呼びますか?

答えて

6
void drawCircle(); 

これは関数呼び出しではありません。それは関数プロトタイプ宣言です。関数を呼び出すために、単に

drawCircle(); 

使用関数のプロトタイプは、単に特定のシグネチャを持つ関数が存在コンパイラに指示します。これにより、このようなことを行うことができます(これは、このようにするのが一般的ではありません)。

int main() { 
    void Foo(); 
    Foo(); 
} 

void Foo { /* whatever */ } 

プロトタイプはFooは、その使用前に宣言されなかったとして、コンパイラはエラーをスローします省略された場合。同様の(そしてより一般的な)静脈では、これを行うこともできます(前方宣言と呼ばれます)。

void Foo(); 

int main() { 
    Foo(); 
} 

void Foo { /* whatever */ } 

それとも、最初にそれを宣言していますが、通常はmain前の機能のトンを望んでいません。

void Foo { /* whatever */ } 

int main() { 
    Foo(); 
} 
+0

'void drawCircle()'は、drawCircleという関数が存在し、引数を取らずにvoidを返すことをコンパイラに伝えています。 –

+0

ありがとう、キース、私はおそらくその効果に何かを追加する必要があります。 –

+0

すごい、間違ったおかげでみんな – classISover

関連する問題