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 );
}

エラーが発生し続けました。5時間修正しようとしましたが、まだわかりません。誰か助けてください!

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
4

1 に答える 1

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.......
于 2012-10-21T01:04:33.233 に答える