我一直在我的代码上收到这个错误信息,它说它在第149行,但第149行什么都没有,所以我很难理解是什么问题。有人知道吗?
上下文--这是一个简单的平衡符号检查程序练习
这是错误信息 之后 我输入文件的名称。
这是完整的代码。
#include <iostream>
#include <fstream>
#include <string>
#include<list>
using namespace std;
void openInputFile(ifstream& inFile);
template<class T>
class Stack {
list <T> data;
public:
Stack() : data() {}
void push(T newItem) { data.push_front(newItem); }
T pop() { T topVal = top(); data.pop_front();
return topVal; }
T top() const { return *data.begin(); }
bool isEmpty() const { return data.size() == 0; }
int size() const { return data.size(); }
void clear() { data.clear(); }
};
class brackets {
brackets() : bracket() {}
char bracket;
};
int main()
{
Stack<char> dataChecker;
ifstream inFile;
string charChecker;
char currChar;
int size;
bool goodToGo = true;
cout << "First enter the name of the data file,
then press enter. " << endl;
openInputFile(inFile);
while (getline(inFile, charChecker)) {
size = charChecker.size();
if (charChecker.find("begin") ||
charChecker.find("Begin") ||
charChecker.find("BEGIN")) {
dataChecker.push('b');
}
if (charChecker.find("end") ||
charChecker.find("End") ||
charChecker.find("END")) {
currChar = dataChecker.pop();
if (currChar != 'b') {
goodToGo = false;
break;
}
}
for (int i = 0; i < size; i+= 1) {
if ((charChecker[i] == '{') ||
(charChecker[i] == '}') ||
(charChecker[i] == '[') ||
(charChecker[i] == ']') ||
(charChecker[i] == '(') ||
(charChecker[i] == ')')) {
switch (charChecker[i]) {
case '{' :
dataChecker.push('{');
case '[':
dataChecker.push('[');
case '(':
dataChecker.push('(');
case '}':
currChar = dataChecker.pop();
if (currChar != '{') {
goodToGo = false;
break;
}
case ']':
currChar = dataChecker.pop();
if (currChar != '[') {
goodToGo = false;
break;
}
case ')':
currChar = dataChecker.pop();
if (currChar != '(') {
goodToGo = false;
break;
}
}
}
}
}
if (goodToGo == false) {
cout << "There is an error in the data." <<
endl;
}
else {
cout << "The data looks good!" << endl;
}
return 0;
}
void openInputFile(ifstream& inFile) {
cout << "Please enter a filename: ";
string filename;
cin >> filename;
inFile.open(filename);
while (!inFile) {
cout << "Bad file name";
cout << "Please enter a filename: ";
cin >> filename;
inFile.clear();
inFile.open(filename);
}
}
查看文件的第149行 <list>
对话框信息中给出了完整的路径,也可以右键点击,打开后在 #include <list>
编辑器中的帮助)。)
_NODISCARD reference operator*() const {
#if _ITERATOR_DEBUG_LEVEL == 2
const auto _Mycont = static_cast<const _Mylist*>(this->_Getcont());
_STL_ASSERT(_Mycont, "cannot dereference value-initialized list iterator");
_STL_VERIFY(this->_Ptr != _Mycont->_Myhead, "cannot dereference end list iterator");
#endif // _ITERATOR_DEBUG_LEVEL == 2
return this->_Ptr->_Myval;
}
所以这很简单。你有一个列表迭代器(例如 iter
)并称 operator*
上(->。*iter
). 这是不允许的,断言就是告诉你这一点。当你在调试器中运行程序并查看调用栈时,你可以直接导航到你调用了 *iter
.
也许你在打电话 top
或 pop
在一个空栈上?