저는 학습 과제로 스택 클래스를 구현하려고합니다. 이건 내 StackNode 클래스, 내가 스택을 만들려면이 노드를 사용C에서 스택 구현
template <typename T>
class StackNode{
public:
T data_{};
StackNode<T> next_;
StackNode() : data_(nullptr), next_(nullptr){}
StackNode(const T& data_) : data_(data_),next_(nullptr) {}
};
이며,이 코드,
template <typename T>
class Stack{
private:
StackNode<T> top_;
std::size_t size_{};
public:
Stack() : top_(nullptr), size_ (0){}
void push(const T& item){
StackNode<T> p{item};
p.next_ = top_;
top_ = p;
}
T pop(){
StackNode<T> p = top_;
top_ = top_.next_;
return p;
}
T peek(){
return top_.data_;
}
};
이 호출 클라이언트입니다
Stack<int> stack{};
stack.push(12);
stack.push(13);
std::cout << stack.peek() << std::endl;
stack.pop();
std::cout << stack.peek() << std::endl;
내가 얻을입니다 컴파일 오류 다음에
In file included from /Users/mstewart/Dropbox/codespace/private/cpp-drive/data-structures/main.cpp:2:
In file included from /Users/mstewart/Dropbox/codespace/private/cpp-drive/data-structures/Stack.hpp:5:
/Users/mstewart/Dropbox/codespace/private/cpp-drive/data-structures/StackNode.h:12:18: error: field has incomplete type 'StackNode<int>'
StackNode<T> next_;
^
/Users/mstewart/Dropbox/codespace/private/cpp-drive/data-structures/Stack.hpp:13:18: note: in instantiation of template class 'StackNode<int>' requested here
StackNode<T> top_;
^
/Users/mstewart/Dropbox/codespace/private/cpp-drive/data-structures/main.cpp:6:16: note: in instantiation of template class 'Stack<int>' requested here
Stack<int> stack{};
^
/Users/mstewart/Dropbox/codespace/private/cpp-drive/data-structures/StackNode.h:9:7: note: definition of 'StackNode<int>' is not complete until the closing '}'
class StackNode{
^
누군가 내가 잘못하고있는 것을 이해하도록 도와 줄 수 있습니까? 나는 C++을 처음 사용합니다.
클래스 인스턴스는 자체 인스턴스를 포함 할 수 없습니다. –
[좋은 초보자 용 책 가져 오기] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) 및 * 포인터 * 및 * 목록 *에 대해 읽으십시오. –
* 학습 수업으로 스택 클래스를 구현하려고합니다 * - 방금'std :: deque'를 멤버로 사용하고 deque의 해당 함수를 'push'로 호출하면 더 나은 행운을 보게 될 것입니다. , 'pop' 등등. – PaulMcKenzie