我在C ++中有一个类模板,而另一个类继承了它。 正如您将看到的,后者不是类模板。 当我尝试通过调用基类(模板一)的构造函数来定义派生类的构造函数时,就会出现问题。 我已将错误发布在代码下方。

为了简单起见,我仅添加了声明。 如果您认为代码可以帮助您了解问题的根源,我很乐意将其发布。

状态2d.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]

有任何想法吗?

#1楼 票数:10

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

也许?

  ask by conectionist translate from so

未解决问题?本站智能推荐:

1回复

从类模板继承模板构造函数?

从C ++ 11的类模板继承构造函数(其中一些是模板)的语法是什么?
1回复

具有指针的C ++类模板构造函数继承

我目前有以下循环双链表作为家长(由班级教授提供): 我们的指令是创建一个从此CDLL继承的队列: 在我的测试中,我有: 我已经对其进行了彻底的调试,它遍历了构造函数步骤(将每个元素推入队列/ cdll),并且遍历了每一步。 当它弹出cdll构造函数时,它“忘记”了它所做
1回复

调用继承参数包的模板构造函数

我在下面的代码中遇到了两个可能相关的问题。 它只是分别定义了两个类型Type1和Type2以及一个从它们继承的“聚合”类型Types 。 我的最终目标是使注释的构造函数起作用以避免临时变量初始化。 如果我取消注释Types下的代码,编译器会给我一个错误: 我试图克服这个问题并想出了编译的代码
2回复

继承类的C ++模板构造函数

从我对C ++中的继承的了解来看,每当子类的构造函数被调用时,父类的构造函数就会被自动调用。 对于模板构造函数,模板参数的数据类型是自动推断的,即我们不需要单独指定模板参数。 该程序生成一个编译错误,我似乎不明白。 产生编译错误 我不知道这里发生了什么。 有任何想法吗?
3回复

如何在部分类模板专业化中实现继承?

我想我只是想念一些小东西。 我想专门针对T =带有任何参数的模板类的实现而专门设计模板类的构造函数。 对不起,如果我的演唱会有点不对劲。 基本上,我需要允许锯齿状的2D数组,所以我可能有一个ArEl<ArEl<int>>并且我想ArEl<ArEl<int
1回复

调用unique_ptr子类的继承的模板构造函数

这不是关于模板构造函数甚至调用继承的模板构造函数的问题的重复项。 它专门用于在unique_ptr <...,...>模板的类instance(?)的子类中调用继承的构造函数。 问题 为了让用户轻松代码来理解,我使用的是using在这个例子: 但是编译失败:
1回复

C++ 派生模板类继承自模板基类,不能调用基类构造函数

我试图从基类继承模板,派生类也是模板,它们具有相同的类型 T。我收到编译错误:非法成员初始化:'Base' 不是基类或成员... 为什么? 我如何调用基类构造函数?
4回复

从模板基类继承构造函数而不重复模板参数?

如何从模板基类继承构造函数而不重复模板参数(并且不使用宏): 例如,这不起作用(使用 GCC 4.8): 如果我重复基类的模板参数,它确实有效: 问题是“U”可能是非常复杂的东西,而且很烦人,而且容易出错。 例如,这是我最初的激励示例之一: 我最终通过使用宏解决了这个问题: 有没有