我正在构建三个类,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);
答案 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>