为什么我得到这个错误,'method'的左边必须有class / struct / union?

时间:2012-03-22 02:33:56

标签: c++ visual-studio-2010 compiler-errors

我正在构建三个类,Maze,MazeRow和MazePoints,以保持迷宫结构,我在为MazeRows设置矢量时遇到问题。下面的代码来自我的Maze类代码。我已将我的头文件包含在MazeRow中。我正在调用一个向量方法,每次得到3个错误。 myMazeRows也是Maze Class的私有成员变量

//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 个答案:

答案 0 :(得分:2)

Maze :: GetRow()应该至少有一个错误:

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

另一个可能是Maze构造函数中的循环是i<rows-1 - 最有可能是i<rows。这不会导致编译错误,但会导致运行时问题。

答案 1 :(得分:1)

正如阿提拉所说,这个功能可以看到错误:

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>