2011-02-09 60 views
0

編譯器給我的這些錯誤,當我運行我的程序 -堆棧鏈接錯誤問題

"Stack<int>::push(int&)", referenced from: 
     _main in main.o 
    "Stack<int>::~Stack()", referenced from: 
     _main in main.o 
     _main in main.o 
    "Stack<int>::Stack()", referenced from: 
     _main in main.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

我沒有得到任何錯誤,當我編譯。

的代碼如下 -

/* 
* Stack.h 
* Stack 
* 
* Created by Sterling McLeod on 2/1/11. 
* Copyright 2011 University of North Carolina at Charlotte. All rights reserved. 
* 
*/ 
#ifndef STACK_H 
#define STACK_H 

#include <exception> 

template<typename T> 
class Stack { 

public: 


    class EmptyTreeException : public std::exception { 
    public: 
     virtual const char* what() const throw(); 
    }; //end exception 



    Stack(); 
    ~Stack(); 

    T peek(); 
    bool isEmpty(); 
    int size(); 

    void push(T&); 
    T pop(); 

private: 
    T* top; 
    int count; 
}; 
#endif STACK_H 
[/code] 
[code] 
/* 
* Stack.cpp 
* Stack 
* 
* Created by Sterling McLeod on 2/1/11. 
* Copyright 2011 University of North Carolina at Charlotte. All rights reserved. 
* 
*/ 

#include "Stack.h" 

template <typename T> 
const char* Stack<T>::EmptyTreeException::what() const throw() { 
    return "The stack is empty!\n"; 
} 


template <typename T> 
Stack<T>::Stack() : count(0) {} 
template <typename T> 
Stack<T>::~Stack() {delete [] top;} 


template <typename T> 
T Stack<T>::peek() {return top[count];} 

template <typename T> 
bool Stack<T>::isEmpty() {return count == 0;} 

template <typename T> 
int Stack<T>::size() {return count;} 




template <typename T> 
void Stack<T>::push(T& n) { 
    top[++count] = n; 
} //END PUSH 


template <typename T> 
T Stack<T>::pop() { 
    if(isEmpty()) 
     throw EmptyTreeException(); 
    T result = top[count]; 
    top[count--] = NULL; 
    return result; 
} //END POP 
[/code] 
[code] 
#include <iostream> 
#include "Stack.h" 

int main (int argc, char * const argv[]) { 
    Stack<int> s; 
    int a = 10; 
    while(a < 50) { 
     s.push(a); 
     a += 10; 
    } //end 
    return 0; 
} 

我不知道爲什麼這是不行的...好像它應該工作沒有問題給我。如果有人能給我一個很棒的提示。謝謝。

+0

可能的重複[整個C++ STL代碼被包含在.h而不是.cpp/.c文件中的原因是什麼?](http://stackoverflow.com/questions/1733112/what-is -the-whole-c-stl-code-to-the-the-h-rather-th) – 2011-02-09 22:33:00

回答