0

C ++のクラステンプレートと、それを継承する別のクラスがあります。ご覧のとおり、後者はクラステンプレートではありません。基本クラス(テンプレートクラス)のコンストラクターを呼び出して、派生クラスのコンストラクターを定義しようとすると、問題が発生します。コードの下にエラーを投稿しました。

簡単にするために、宣言のみを追加しました。コードが問題の原因を理解するのに役立つと思われる場合は、喜んで投稿します。

state2d.h

#ifndef STATE2D_H
#define STATE2D_H

template <typename T>
class State2D
{
public:
    State2D(unsigned int _rows, unsigned int _columns);
    State2D(unsigned int _rows, unsigned int _columns, const T& val);
    State2D(const State2D<T> &st);
    ~State2D();
    T& operator()(unsigned int i, unsigned int j);
    const T& operator()(unsigned int i, unsigned int j) const;
    unsigned int GetRowCount() const;
    unsigned int GetColumnCount() const;
    unsigned int GetAvailablePositionsCount() const;

protected:
    T** matrix;
    unsigned int rows;
    unsigned int columns;
    unsigned int availablePositions;
};

#endif // STATE2D_H

TicTacToeState.h

#ifndef TICTACTOESTATE_H
#define TICTACTOESTATE_H

#include "state2d.h"

class TicTacToeState : public State2D<char>
{
public:
    TicTacToeState();
};

#endif // TICTACTOESTATE_H

TicTacToeState.cpp

#include "tictactoestate.h"

TicTacToeState::TicTacToeState() : State2D(3,3,' ') // ERROR here; see below
{
}

エラー:クラス'TicTacToeState'には'State2D'という名前のフィールドがありませんエラー:' State2D :: State2D()'の呼び出しに一致する関数がありません候補は次のとおりです:State2D :: State2D(const State2D&)[with T = char] State2D: :State2D(unsigned int、unsigned int、const T&)[with T = char] State2D :: State2D(unsigned int、unsigned int)[with T = char]

何か案は?

4

1 に答える 1

10
: State2D<char>(3,3,' ')

多分?

于 2012-09-17T14:06:27.217 に答える