2012-10-21 93 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