0

所以我有一个名为 HPStack 的类,我必须将它包含在我的主类等中。但是我得到一个“包含在文件中”的错误,这可能是什么原因造成的?

我的字符串对象也有错误,我不知道为什么,错误是:“无法识别字符串”。

我是 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();
    }
4

2 回答 2

2

错误是,我猜,因为这条线:

double register_[4] = {};

声明类成员时不能初始化它们。

如果您的编译器足够新以支持 C++11 功能,则可以将初始化列表与构造函数一起使用:

HPStack::HPStack() 
    : register_{}
{
}

否则,您必须在构造函数中手动初始化数组。


正如我在评论中指出的那样,使用register_ - 2没有意义,因为它返回一个指针,因此索引变量i将超出数组末尾。

register_ - 1并且在循环中使用as 条件pop更没有意义,因为它总是非零,因此总是为真,循环将永远循环。

于 2013-05-01T17:22:21.270 回答
1

您在;类定义的末尾缺少:

class HPStack {
    ...
};  // <== This semicolon is required
于 2013-05-01T18:59:48.340 回答