2014-02-27 71 views
0

我是C++的新手,我試圖理解堆棧以及類是如何工作的,但我似乎無法讓我的程序編譯。我不斷收到愚蠢的錯誤,我試圖在網上搜索,但找不到任何有用的東西。如果這個問題很愚蠢,我很抱歉。我是C++的新手,我不知道其他地方可以找到。C++編譯錯誤。 「堆棧不會命名一個類型。」

謝謝。

每當我試圖編譯(做),我得到這個錯誤:

stacks.cpp:4:1: error: ‘Stack’ does not name a type stacks.cpp:7:6: error: ‘Stack’ has not been declared stacks.cpp:7:18: error: ‘string’ was not declared in this scope stacks.cpp:7:18: note: suggested alternative: /usr/include/c++/4.6/bits/stringfwd.h:65:33: note:
‘std::string’ stacks.cpp:7:27: error: expected ‘,’ or ‘;’ before ‘{’ token make: * [stacks.o] Error 1

Stack.h

#ifndef _STACK 
#define _STACK 
// template <class ItemType>; 
#include <string> 
using namespace std; 
class Stack{ 
    static const int MAX_STACK = 10; 
    private: 
     string data[MAX_STACK]; 
     int top; 
    public: 
     Stack(); 
     bool pop(); 
     bool push(string item); 
     string peek(); 
     bool isEmpty(); 
}; 
#endif 

Stack.cpp

#include <cassert> 

    Stack::Stack(){ 
     top = -1; 
    } 
    bool Stack::Push(string s){ 
     bool result = false; 
     if(top > MAX_STACK - 1){ 
     ++top; 
     data[top] = s; 
     result = true; 
     } 
     return result; 
    } 
    bool Stack::Pop(){ 
     bool result = false; 
     if(!isEmpty()){ 
      --top; 
      result = true; 
     } 
     return result; 
    } 
    string Stack::peek() const{ 
     assert(!isEmpty()); 
     return data[top]; 
    } 

Tester.cpp

#include <iostream> 
#include <string> 
#include <cstdlib> 

#include "stacks.h" 
int main(){ 
    Stack test; 
    test.push("Hello"); 
    test.push("Yes!"); 
    while(!test.isEmpty()){ 
     cout << test.peek(); 
     test.pop(); 
    } 
} 

生成文件:

CXX = g++ 

CXXFLAGS = -Wall -ansi -std=c++0x 

TARGET = execute 

OBJS = Tester.o stacks.o 

$(TARGET) : $(OBJS) 
    $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS) 

Tester.o : Tester.cpp 
    $(CXX) $(CXXFLAGS) -c -o Tester.o Tester.cpp 

stacks.o : stacks.cpp stacks.h 
    $(CXX) $(CXXFLAGS) -c -o stacks.o stacks.cpp 

.PHONY : clean 
clean: 
    rm $(OBJS) 
+0

是文件'stacks.h'或' stack.h'?你也在'stack.cpp'中包含頭文件嗎? – PomfCaster

+2

你需要在'stacks.cpp'中包含'stacks.h'。 –

+0

至於良好的做法:在全局範圍內使用名稱空間指令不應該出現在頭文件中,因爲它會污染包含頭文件的每個cpp文件中的全局名稱空間。 – sellibitze

回答

1

您需要包括stack.h在文件stack.cpp

另外:

#include "stacks.h" 

應該stack.h如果是這樣的文件的名稱。

+0

哇。這解決了它!謝謝! – user2351234

2

你忘了,包括在Stack.cppStack.h ....你也被包括stacks.h中不存在包括Tester.cppStack.h ...希望這將有助於..

+0

是的,這工作謝謝你! – user2351234

相關問題