2013-05-01 37 views
0

所以我呼籲HPStack一類,我必須把它列入我的主類等,但我得到一個錯誤「文件從收錄」,可能會造成什麼這個?需要幫助的#include上似乎並不奏效

而且我的字符串對象也有錯誤,我不知道爲什麼,錯誤是:「無法識別字符串」。

我是新的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(); 
    } 
+1

什麼是完整的錯誤,什麼行它。 – 2013-05-01 17:14:41

+0

另外,歡迎來到Stack Overflow。請花時間閱讀[常見問題]。你會得到一個徽章(C: – 2013-05-01 17:16:02

+0

請注意,'register_ - 前陣2'返回一個指向 – 2013-05-01 17:20:55

回答

2

的錯誤是,我猜,因爲這行:

double register_[4] = {}; 

聲明時,他們不能初始化類成員。

如果你的編譯器是足夠的新支持C++ 11層的功能,你可以使用一個初始化列表與構造:

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

否則,您必須在構造函數中初始化數組。


正如我在註釋中提到,使用register_ - 2是沒有意義的,因爲它返回一個指針,以便變量i該指數將方式超出了數組的末尾。

而且使用register_ - 1作爲pop循環中的條件,使更少的意義,因爲它永遠是非零的,因此總是如此循環將永遠循環下去。

+0

好吧,那麼我可以使用什麼來代替regidter_-2來循環訪問數組?我還在頭文件中解決了初始化問題。 – user2333446 2013-05-01 17:57:48

+0

@ user2333446這取決於你想做什麼,這對我來說不是很明顯。但是,由於您使用'i'作爲具有四個條目的數組的索引,它必須位於'0'和'3'(含)之間。 – 2013-05-01 17:59:22

+0

我只是將舊的register_-1換成了3,將register_-2換成了2,我認爲這應該起作用... – user2333446 2013-05-01 18:00:25

1

你缺少;在類定義的末尾:

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

哦,謝謝,我錯過了。也就是說它是「無法解析標識符字符串」的任何想法爲什麼? – user2333446 2013-05-01 19:15:18