Почему я получаю эту ошибку, слева от «метода» должен быть класс / структура / объединение? - PullRequest
1 голос
/ 22 марта 2012

Я строю три класса, Maze, MazeRow и MazePoints, для хранения структур лабиринта, и у меня возникают проблемы с настройкой моего вектора для MazeRow. Ниже приведен код из моего кода класса Maze.Я включил мой заголовочный файл для MazeRow.Я получаю 3 ошибки, где я вызываю векторный метод.Также myMazeRows является частной переменной-членом класса лабиринта

//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 ]

2 голосов
/ 22 марта 2012

Как минимум одна ошибка Maze :: GetRow () должна быть:

MazeRow*       Maze::getRow(int row)  
{ 
  return &myMazeRows.at(row);  // note the change from * to &
} 

Другое, возможно, то, что ваш цикл в конструкторе Maze имеет значение i<rows-1 - скорее всего, должно быть i<rows. Это не приведет к ошибке компиляции, но к проблемам во время выполнения.

1 голос
/ 22 марта 2012

Как сказал Аттила, в этой функции можно увидеть ошибку:

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

Если бы myMazeRows содержал MazeRow **, то это было бы допустимо, но вы, вероятно, хотели взять адрес объекта MazeRow, например:

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

Для ошибок std::vector убедитесь, что у вас либо using namespace std; вверху заголовочного файла, либо используется std::vector, и убедитесь, что у вас также есть #include <vector>.

...