我是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)
是文件'stacks.h'或' stack.h'?你也在'stack.cpp'中包含頭文件嗎? – PomfCaster
你需要在'stacks.cpp'中包含'stacks.h'。 –
至於良好的做法:在全局範圍內使用名稱空間指令不應該出現在頭文件中,因爲它會污染包含頭文件的每個cpp文件中的全局名稱空間。 – sellibitze