所以我有一个名为HPStack的类,我必须将它包含在我的主类等中。但是我得到了一个“In File included from”错误,可能是什么导致了这个?
此外我的字符串对象也有错误我不知道为什么,错误是:“无法识别字符串”。
我是C ++的新手,所以任何帮助都会受到赞赏,在此先感谢。
我得到的错误(我认为)是:
error: expected unqualified-id before "namespace"
error: expected `,' or `;' before "namespace"
error: expected namespace-name before ';' token
error: `<type error>' is not a namespace
我不确定我错过了什么,但这并不能说明我的意思。
这是我的代码:class.h文件。
#ifndef HPSTACK_H
#define HPSTACK_H
class HPStack {
public:
HPStack();
void push(double);
double pop();
double peek();
private:
double register_[4];
}
#endif
class.cpp文件。
#include "HPStack.h"
#include <cstdlib>
HPStack::HPStack() : register_{}{
}
double HPStack::push(double x) {
for (int i = 2; i >= 0; i--) {
if (isdigit(register_[i])) {
register_[i] = register_[i + 1];
}
register_[0] = x;
}
}
double HPStack::pop() {
return register_[0];
for (int i = 0; i < 3; i++) {
register_[i] = register_[i + 1];
}
}
double HPStack::peek() {
return register_[0];
}
我的主要档案:
#include "HPStack.h"
#include <cstdlib>
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main() {
HPStack stack;
string line;
while (getline(cin, line)) {
stringstream expression(line);
string token;
while (expression >> token) {
if (isdigit(token[0])) {
stack.push(atof(token.data()));
} else if (token == "+") {
double x = stack.pop();
double y = stack.pop();
double z = (y + x);
stack.push(z);
}
}
cout << stack.peek();
}
答案 0 :(得分:2)
错误是,我猜,因为这一行:
double register_[4] = {};
在声明类成员时,无法初始化类成员。
如果您的编译器足够新以支持C ++ 11功能,则可以使用带有构造函数的初始化列表:
HPStack::HPStack()
: register_{}
{
}
否则,您必须在构造函数中手动初始化数组。
正如我在评论中所指出的,使用register_ - 2
没有任何意义,因为它返回一个指针,因此索引变量i
将 way 超出数组的末尾
使用register_ - 1
作为pop
循环中的条件更有意义,因为它总是非零,因此始终为真,循环将永远循环。
答案 1 :(得分:1)
你错过了课程定义末尾的;
:
class HPStack {
...
}; // <== This semicolon is required