0

だから、私は自分のコードをコンパイルしようとしていますが、コンパイラは「'mysnake'が宣言されていません(最初にこの関数を使用します)」と文句を言い続けますが、私はそれを宣言しました。これは私のMain.cppです、宣言されている場合。

#include "Class.h"
#include "Snake.h"

int main(int argc, char* args[]){
    Prog run;
    if((run.Init())==false){
      return(1);
      }
    Snake mysnake;
    if(run.LoadFiles()==false){
      return(1);
      }
    run.MainLoop();
    if(run.Draw()==false){
      return(1);
      }
    run.CleanUp();
    return(0);
}

そして、これはコンパイラに文句を言わせるファイルです(AFAIKは、コンパイルされる'mysnake'への参照を持つ最初のファイルです)

#include "Class.h"
#include<sstream>
#include "Snake.h"

bool Prog::Draw(){
     std::stringstream message;
     SDL_Rect position;
     SDL_BlitSurface(image, NULL, screen, NULL);
     int s=mysnake.EndSnake();
     message<<"Your snake was "<<s<<" blocks long.";
     msg=TTF_RenderText_Solid(font, message.str().c_str(), font_color);
     if(msg==NULL){
       return(false);
       }
     position.x=(WWIDTH-msg->w)/2;
     position.y=(WHEIGHT-msg->h)/2;
     SDL_BlitSurface(msg, NULL, screen, &position);
     SDL_Flip(screen);
     return(true);
     }

私はそれについて1時間以上考えてきましたが、なぜそれがこれを行うのかまだ理解できません。ちなみに、私はBloodshed Dev C ++を使用していますが、助けていただければ幸いです。

4

2 に答える 2

3

関数内Drawには、と呼ばれる宣言された変数はありませんmysnake。その関数は、にローカルであるため、でmysnake宣言されているを見ることができません。オブジェクトを関数に渡して、実際に話しているヘビがわかるようにする必要があります。mainmainmysnakeDraw

これを行うには、Drawタイプの引数にconst Snake&「参照」を指定しますconst Snake(または、constifEndSnakeが非constメンバー関数である場合は削除します)。

bool Prog::Draw(const Snake& snake) {
  // ...
}

そして、あなたが電話Drawをするときmain、これをしてください:

run.draw(mysnake);

これで、関数にはから渡されたDrawという変数があります。引数は参照であるため、表示されるオブジェクトはとまったく同じオブジェクトです。引数がの代わりに型であった場合は、からのコピーを取得します。snakemainSnakemainSnakeconst Snake&mysnakemain


いくつかの追加のアドバイス:

私たちは通常、次のような条件を記述し(run.Init())==falseます!run.init()-それははるかによく読みます。戻ることも通常return true;、ではなく、と書かれreturn(true);ていますが、それはあなた次第です。

于 2013-02-04T19:36:11.313 に答える
0

mysnakeで宣言されているという事実はmain、でそれを使用することを許可していませんProg。mysnakeへの参照をDrawメソッドに送信することをお勧めします。コンストラクターまたはメソッドの呼び出しを介して。

Prog run(mysnake);
run.draw();

また

run.draw(mysnake);
于 2013-02-04T19:35:59.800 に答える