需要帮助#include似乎没有工作

时间:2013-05-01 17:13:01

标签: c++ string include

所以我有一个名为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();
    }

2 个答案:

答案 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