好的,第一次使用stackoverflow,请和我一起裸照。使用未声明的标识符'top';你的意思是'流行'吗?
我的教授给了我一些关于boggle游戏回溯的C++代码。但它不会为我编译。我得到这个错误,使用未声明的标识符'顶部';你的意思是'流行'吗?并且如果需要的话,则代码的其余部分。谢谢!
// Maze01.cpp : Defines the entry point for the console application.
#include <cstdlib>
#include <iostream>
#include <stack>
using namespace std;
template<class T>
class Stack : public stack<T> {
public:
T pop() {
T tmp = top(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
stack<T>::pop();
return tmp;
}
};
class Cell {
public:
Cell(int i = 0, int j = 0) {
x = i; y = j;
}
bool operator== (const Cell& c) const {
return x == c.x && y == c.y;
}
private:
int x, y;
friend class Maze;
};
class Maze {
public:
Maze();
void exitMaze();
private:
Cell currentCell, exitCell, entryCell;
const char exitMarker, entryMarker, visited, passage, wall;
Stack<Cell> mazeStack;
char **store; // array of strings;
void pushUnvisited(int, int);
int rows, cols;
friend ostream& operator<< (ostream& out, const Maze& maze) {
for (int row = 0; row <= maze.rows + 1; row++)
out << maze.store[row] << endl;
out << endl;
return out;
}
};
Maze::Maze() : exitMarker('e'), entryMarker('m'), visited('.'),
passage('0'), wall('1') {
Stack<char*> mazeRows;
char str[80], *s;
int col, row = 0;
cout << "Enter a rectangular maze using the following "
<< "characters:\nm - entry\ne - exit\n1 - wall\n0 - passage\n"
<< "Enter one line at at time; end with Ctrl-z:\n";
while (cin >> str)
{
row++;
cols = strlen(str);
s = new char[cols + 3]; // two more cells for borderline columns;
mazeRows.push(s);
strcpy(s + 1, str);
s[0] = s[cols + 1] = wall; // fill the borderline cells with 1s;
s[cols + 2] = '\0';
if (strchr(s, exitMarker) != 0)
{
exitCell.x = row;
exitCell.y = strchr(s, exitMarker) - s;
}
if (strchr(s, entryMarker) != 0)
{
entryCell.x = row;
entryCell.y = strchr(s, entryMarker) - s;
}
}
rows = row;
store = new char*[rows + 2]; // create a 1D array of pointers;
store[0] = new char[cols + 3]; // a borderline row;
for (; !mazeRows.empty(); row--) {
store[row] = mazeRows.pop();
}
store[rows + 1] = new char[cols + 3]; // another borderline row;
store[0][cols + 2] = store[rows + 1][cols + 2] = '\0';
for (col = 0; col <= cols + 1; col++) {
store[0][col] = wall; // fill the borderline rows with 1s;
store[rows + 1][col] = wall;
}
}
void Maze::pushUnvisited(int row, int col) {
if (store[row][col] == passage || store[row][col] == exitMarker) {
mazeStack.push(Cell(row, col));
}
}
void Maze::exitMaze() {
int row, col;
currentCell = entryCell;
while (!(currentCell == exitCell)) {
row = currentCell.x;
col = currentCell.y;
cout << *this; // print a snapshot;
if (!(currentCell == entryCell))
store[row][col] = visited;
pushUnvisited(row - 1, col);
pushUnvisited(row + 1, col);
pushUnvisited(row, col - 1);
pushUnvisited(row, col + 1);
if (mazeStack.empty()) {
cout << *this;
cout << "Failure\n";
return;
}
else currentCell = mazeStack.pop();
}
cout << *this;
cout << "Success\n";
}
int main(int argc, char* argv[])
{
Maze().exitMaze();
return 0;
}
编译器不抱怨['堆栈 :: pop()方法']( http://www.cplusplus.com/reference/stack/stack/pop/)但是关于'top()'?也许http://www.cplusplus.com/reference/stack/stack/top/可以解决这个问题;-) –
VolkerK
你使用什么编译器?它编译与VS2013确定。 –
g ++。我在我的Mac上编程,我的教授使用VS.我希望VS在mac上运行:(如果我使用与VS相同的编译器,它会工作吗? –