2012-10-21 126 views
0

我正在做一個程序,我需要將對象存儲在堆棧中。我定義堆棧作爲模板類是這樣的:使用堆棧來存儲對象

template < class T > 
class stackType 
{ 
private: 
    int maxStackSize; 
    int stackTop; 
    T *list;   // pointer to the array that holds the stack elements 
public: 
    stackType(int stackSize); // constructor 
    ~stackType();    // destructor 
    void initializeStack(); 
    bool isEmptyStack(); 
    bool isFullStack(); 
    void push(T newItem); 
    T top(); 
    void pop(); 
}; 

這是我的課:

class Matrix_AR 
{ 
public: 
    float **Matrix;  // Matrix as a pointer to pointer 
    int rows, columns;  // number of rows and columns of the matrix 

// class function 
    Matrix_AR(); 
    Matrix_AR(int m, int n); // initialize the matrix of size m x n 
    void inputData(string fileName); // read data from text file 
    void display(); // print matrix 
}; 

然而,當我宣佈這樣

void myfunction(stackType<Matrix_AR>& stack) 
{ 
    Matrix_AR item1, item2, item3; 

    stack.push(item1); 
    stack.push(item2); 
    stack.push(item3); 
} 

我一直得到一個功能錯誤。我試圖修復它五個小時,仍然無法弄清楚。任何人都可以幫忙,請!!!

Undefined symbols for architecture x86_64: 
     "Matrix_AR::Matrix_AR()", referenced from: 
     myfunction(stackType<Matrix_AR>&, char&, bool&)in main.o 
ld: symbol(s) not found for architecture x86_64 
+0

沒有使用[std :: stack](http://en.cppreference.com/w/cpp/container/stack)的任何特定原因? – Collin

回答

2

看起來好像你沒有定義你的默認構造函數。如果你想有一個快速的解決方案只需要聲明它是這樣的:

// class function 
Matrix_AR() {} 
Matrix_AR(int m, int n); // initialize the matrix of size m x n 
void inputData(string fileName); // read data from text file 
void display(); //... 

發佈的錯誤是默認的構造函數,但是如果你沒有定義等功能,你會得到類似的錯誤,也爲它們。您應該有一個單獨的.cpp文件,其中包含所有成員函數的定義。

Matrix_AR::Matrix_AR() 
{ 
... 
} 

Matrix_AR::Matrix_AR(int m, int n) 
{ 
... 
} 

void Matrix_AR::inputData(string fileName) 
{ 
... 
} 

etc....... 
+0

哦,是的,你修好了。非常感謝:D。我覺得我現在很愚蠢 – Harry