需要帮助 #include 似乎不起作用

need help on #include doesn't seem to be working

本文关键字:不起作用 #include 帮助      更新时间:2023-10-16

所以我有一个叫做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

我不知道我错过了什么,但这并没有告诉我太多。

下面是我的代码:

#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();
    }

错误是,我猜,因为这一行:

double register_[4] = {};

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

如果你的编译器足够新,可以支持c++ 11的特性,你可以在构造函数中使用初始化列表:

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

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


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

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

您错过了类定义末尾的;:

class HPStack {
    ...
};  // <== This semicolon is required