2016-04-15 73 views
-1

好的,第一次使用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; 
} 
+0

编译器不抱怨['堆栈 :: pop()方法']( http://www.cplusplus.com/reference/stack/stack/pop/)但是关于'top()'?也许http://www.cplusplus.com/reference/stack/stack/top/可以解决这个问题;-) – VolkerK

+0

你使用什么编译器?它编译与VS2013确定。 –

+0

g ++。我在我的Mac上编程,我的教授使用VS.我希望VS在mac上运行:(如果我使用与VS相同的编译器,它会工作吗? –

回答

1

修复这样说:

T tmp = this->top(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

gcc5.3解释了原因:

/tmp/gcc-explorer-compiler116315-75-7jbdnd/example.cpp: 
    In member function 'T Stack<T>::pop()': 
13 : error: there are no arguments to 'top' that depend on a template parameter, 
    so a declaration of 'top' must be available [-fpermissive] 
T tmp = top(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
^ 
13 : note: (if you use '-fpermissive', G++ will accept your code, 
    but allowing the use of an undeclared name is deprecated) 
Compilation failed 
+0

Expletive deleted!我从来没有想到这一点,比我的音调更好 – user4581301

+0

这使得它可以编译,但它不能解决迷宫它只是停止了这个过程并将我从运行它的控制台中注销 –

+2

@AlexLopez我认为你比较了解程序应该做什么比我更好,我认为他的下一步是单步执行找到问题的代码 –