2012-03-22 9 views
1

私は迷路構造を保持するためにMaze、MazeRow、MazePointsの3つのクラスを構築していますが、私はMazeRowsのベクターをセットアップすることに問題があります。以下のコードはMazeクラスのコードです。私はMazeRow用の私のヘッダーファイルを含めました。私はそれぞれベクトルメソッドを呼び出す3つのエラーが発生しています。またmyMazeRowsは迷路のプライベートメンバ変数はクラスなぜこのエラーが発生するのですか? 'method'の左側にclass/struct/unionが必要ですか?

//Maze Header File  
#include "MazeRow.h" 
#include <vector> 
using namespace std; 
namespace MazeSolver 
{ 

class Maze 
    { 
    public: 
     Maze(int rows, int columns); 
     MazeRow *  getRow(int row); 
      private: 
        vector<MazeRow> myMazeRows(); 

//Maze Implementation File 
#include "stdafx.h" 
#include "Maze.h" 
#include <vector> 
using namespace std; 
using namespace MazeSolver; 


    Maze::Maze(int rows, int columns) 
{ 
    //Recieving the Compile Error (C2228) 
     myMazeRows.resize(rows); 

    //Initializing Each Row 
    for(int i=0; i< rows;i++) //Recieving the Compile Error (C2228) 
      myMazeRows.push_back(MazeRow(i,columns)); 
} 

MazeRow*  Maze::getRow(int row) 
{ 
    //Recieving the Compile Error (C2228) 
    return &myMazeRows.at(row); 
} 

//Maze Row Header File 
class MazeRow 
    { 

    public: 
     MazeRow(int rowNum, vector<MazePoint>); 
     MazeRow(int rowNum, int mazPoints); 
+2

エラーを示す線はどれですか? *実際のエラーメッセージ(コピー&ペースト)とは何ですか?また、 'myMazeRows'の実際の定義を表示してください。 –

+0

正しい#インクルードがありますか? – Benoir

+0

'myMazeRows'の宣言を表示すると助けになるかもしれません。 @Benoirが暗示しているように、 '#include'ステートメントも表示することができます。 – aldo

答えて

2

少なくとも1つのエラー迷路::関連項目GetRow()であるべきである。

​​

もう1つの可能性は、Mazeコンストラクタのループがにあるということです210 - は、おそらくi<rowsである必要があります。コンパイルエラーは発生しませんが、実行時の問題が発生します。

1

アッティラは、エラーがこの機能で見ることができ、言ったように:

MazeRow *Maze::getRow(int row) 
{ 
    return *myMazeRows.at(row); 
} 

myMazeRowsMazeRow **を含むされた場合、これは有効であるだろうが、あなたはおそらくMazeRowオブジェクトのアドレスを取得することを意図し、以下のようなので:std::vectorエラーの場合

MazeRow *Maze::getRow(int row) 
{ 
    // Ampersand (&) take the address of the row 
    return &myMazeRows.at(row); 
} 

は、あなたはどちらかあなたのヘッダファイルの先頭にusing namespace std;を持っている、またはstd::vectorを使用していることを確認し、あなたヘクタールを確保しますve #include <vector>も同様です。

関連する問題