gpt4 book ai didi

C++子类将父类的名称误认为字段

转载 作者:行者123 更新时间:2023-11-30 02:48:20 24 4
gpt4 key购买 nike

我正在尝试修改一个 C++ 项目供我自己使用,但在创建派生类时遇到了问题。

当我让派生类的构造函数调用其父类的构造函数时,我收到一条错误消息,指出派生类没有与其父类的名称相对应的字段 。我不明白我的问题出在哪里。

.h文件相关部分如下:

// grandparent_class ////////////////////////////////////////////////////////////////

template <typename T, typename Tds1 = T, typename Tds2 = T>
class grandparent_class : public module_1_1<T> {
public:
grandparent_class(uint nfeatures, const char *name = "grandparent_class");
virtual ~grandparent_class();

// parent_class ////////////////////////////////////////////////////////////////

template <typename T, typename Tds1 = T, typename Tds2 = T>
class parent_class : public grandparent_class<T,Tds1,Tds2> {
public:

parent_class(uint nclasses, double target_factor = 1.0,
bool binary_target = false,
t_confidence conf = confidence_max,
bool apply_tanh = false, const char *name = "parent_class",
int force_class = -1, int single_output = -1,
idxdim *kerd = NULL, double sigma_scale = 3,
bool silent = false);
virtual ~parent_class();

// members
protected:
int ctr;
};

// child_class (The Class I'm Introducing)////////////////////////////////////////////
template <typename T, typename Tds1 = T, typename Tds2 = T>
class child_class : protected parent_class<T,Tds1,Tds2> {
public:
child_class(uint nclasses, double target_factor = 1.0,
bool binary_target = false,
t_confidence conf = confidence_max,
bool apply_tanh = false, const char *name = "child_class",
int force_class = -1, int single_output = -1,
idxdim *kerd = NULL, double sigma_scale = 3,
bool silent = false);

virtual ~child_class();
};
//////////////////////////////////////////////////////////////////////////////

我为我的子类定义构造函数如下:

//////////////////////////////////////////////////////////////////////////////

template <typename T, typename Tds1, typename Tds2>
child_class<T,Tds1,Tds2>::
child_class(uint nclasses, double target_factor, bool binary_target_,
t_confidence conf, bool apply_tanh_, const char *name_,
int force, int single, idxdim *kerd, double sigma_scale,
bool silent)
: parent_class(nclasses, target_factor, binary_target_,
conf, apply_tanh_, name_,
force, single, kerd, sigma_scale, silent)
{
...
};

我的子类声明和定义与父类和祖父类的声明和定义在同一个文件中,所以我认为不存在缺少“include”的问题。据我所知,我用于指示继承的语法是正确的,并且我正确地调用了父类的构造函数。

然而,当我编译时,出现以下错误:

/home/me/ebl_answer.hpp: In constructor ‘ebl::child_class<T, Tds1, Tds2>::child_class(uint, double, bool, ebl::t_confidence, bool, const char*, int, int, ebl::idxdim*, double, bool)’:
/home/me/ebl_answer.hpp:416:4: error: class ‘ebl::child_class<T, Tds1, Tds2>’ does not have any field named ‘parent_class’
: parent_class(nclasses, target_factor, binary_target_,

如果有人能看到我的错误,那将非常有帮助....

最佳答案

为了使用继承,继承自的类必须被完全定义。您不能从类模板继承,因为它不是类型,它只是用于消除(实例化)真实类型的东西。这就是您在声明中所做的。调用基类的构造函数也是如此。

尝试使用 parent_class<T, Tds1, Tds2>

template <typename T, typename Tds1, typename Tds2>
child_class<T,Tds1,Tds2>::
child_class(uint nclasses, double target_factor, bool binary_target_,
t_confidence conf, bool apply_tanh_, const char *name_,
int force, int single, idxdim *kerd, double sigma_scale,
bool silent)
: parent_class<T, Tds1, Tds2>(nclasses, target_factor, binary_target_,
conf, apply_tanh_, name_,
force, single, kerd, sigma_scale, silent)
{
...
}

现场观看example .

关于C++子类将父类的名称误认为字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22075426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com