3

私は C++ を初めて使用し、Ubuntu 10.04 で NetBeans IDE を使用して宿題を準備しています。C++ コンパイラとして g++ を使用しています。

エラーメッセージ:

build/Debug/GNU-Linux-x86/Maze.o: In function `Maze':
Maze/Maze.cpp:14: undefined reference to `Stack<Coordinate>::Stack()'
Maze/Maze.cpp:14: undefined reference to `Stack<Coordinate>::Stack()'
Maze/Maze.cpp:69: undefined reference to `Stack<Coordinate>::push(Coordinate)'
Maze/Maze.cpp:79: undefined reference to `Stack<Coordinate>::isEmpty()'
Maze/Maze.cpp:87: undefined reference to `Stack<Coordinate>::destroy()'

そして私の関連コード:

迷路.h

#include "Coordinate.h"
#include "Stack.h"
....
....
/**
 * Contains the stack object
 *
 * @var  Stack stack
 * @access private
 */
Stack<Coordinate> *stack;
...
...

迷路.cpp

#include "Maze.h"
...
...
Maze::Maze()
{
    // IT SHOWS THAT THE FOLLOWING LINE HAS AN ERROR///
    stack = new Stack<Coordinate>;
    ///////////////////////////////////////////////////

    for( int y=0; y<8; y++ )
    {
        for( int x=0; x<8; x++ )
        {
            maze[y][x] = '0';
        }
    }
}
...
...

エラー出力によると、スタック変数を使用した各行にエラーがあります:未定義の参照。

スタック.cpp

#include "Stack.h"
...
...
template <class T> Stack<T>::Stack()
{
    // Create the stac!
    create();
}
...

私はそれをグーグルで検索しましたが、問題を解決できませんでした。インクルードの順序に問題があるか、ポインターを間違った方法で使用した可能性があります。

私もmakefileを自作してみましたが、結果は変わりませんでした。このリンクに従ってこのメイクファイルを準備しました: http://www.cs.umd.edu/class/spring2002/cmsc214/Tutorial/makefile.html

これが私のメイクファイルです:

maze: Maze.o Stack.o Coordinate.o
 g++ -Wall Maze.o Stack.o Coordinate.o -o maze

Maze.o: Maze.cpp Maze.h Stack.h Coordinate.h
 g++ -Wall -c Maze.cpp

Stack.o: Stack.cpp Stack.h
 g++ -Wall -c Stack.cpp

Coordinate.o: Coordinate.cpp Coordinate.h
 g++ -Wall -c Coordinate.cpp

Maze.h: Stack.h Coordinate.h

どうすればこのエラーを克服できますか? 何か案は?

4

1 に答える 1

9

スタックはテンプレートです。完全な定義は、ヘッダーファイルに含める必要があります。つまり、.hファイルと.cppファイルに分けないでください。

于 2010-11-04T20:21:21.797 に答える