C++ C++;没有合适的默认构造函数可用-继承的模板构造函数,没有参数
我已经研究了十几个qst,其中有短语C++ C++;没有合适的默认构造函数可用-继承的模板构造函数,没有参数,c++,templates,inheritance,C++,Templates,Inheritance,我已经研究了十几个qst,其中有短语没有合适的默认构造函数可用,但没有任何帮助解决我自己的问题 这是一个非常基础的C++ QST(因为我还在学习绳子),所以如果你的眼睛在简单化时就很抱歉。我试图继承一个类,它有一个没有参数的模板构造函数。例如: class Base { public: template<class T> Base() { T *t = this; //more irrelevant stuff } } 及 无济于事。在这两种情况下,我都会收到错误消息没
没有合适的默认构造函数可用
,但没有任何帮助解决我自己的问题
<>这是一个非常基础的C++ QST(因为我还在学习绳子),所以如果你的眼睛在简单化时就很抱歉。我试图继承一个类,它有一个没有参数的模板构造函数。例如:
class Base {
public:
template<class T>
Base() {
T *t = this;
//more irrelevant stuff
}
}
及
无济于事。在这两种情况下,我都会收到错误消息没有合适的默认构造函数可用
。怎么做呢?如果这是不可能的,你能解释一下原因吗
当我像template Base(T*T)
(将template参数作为参数)那样设置构造函数时,它就起作用了
p、 如果这很重要,在我的代码中,我还继承了另一个类派生的
。中没有用于访问默认构造函数的语法
class blah_t
{
public:
template< class other_t > blah_t() {}
};
正如神圣标准所解释的,构造函数没有名字
但是,回到原来的问题,为了能够指定模板参数,您需要一些涉及模板参数类型的普通函数参数为什么需要T
?你就不能这样做吗代码>?我还没有尝试,但您可能需要派生():基()
。我认为CRTP在这里可能会更好。从我观察到的情况来看,当基类被继承时,this
指针会指向最顶层的继承类。向下投票者:诚然,这是一个基本的qst,但它在stackoverflow的范围内。如果你愿意解释为什么这值得投反对票,那么我可以避免将来犯这样的错误。谢谢。我明白了,用+1来反击无法解释的下伏特。所以让它工作的唯一方法就是包括(T*T)
或其他什么?构造函数参数。我将其更改为“template Base(T*T)”,然后作为构造函数参数传入this
。它实现了与我尝试执行的相同的效果,但我得到了编译器警告“this”:在基本成员初始值设定项列表中使用。为什么要警告将'this'作为构造函数参数传递?一些编译器对此发出警告,因为在最常见的情况下,可能会做一些不好的事情,比如引用尚未初始化的内容。如果可以的话,关掉那个警告。对于良好的工作,最好有完全干净的编译,没有诊断,这样您就可以确保注意到任何真正的诊断。也就是说,你用这个模板做的事情听起来有点奇怪。但是你必须发布更完整的代码或描述,以便读者能够提出替代方案。干杯-考虑之后,我认为你说使用模板是一种奇怪的方式是正确的。我的主要目标是坚持标准C++,因为我想开发一个可以被其他人重用的类。CRTP解决方案似乎是一条出路。
class Derived : public Base {
public:
Derived() {
}
}
class blah_t
{
public:
template< class other_t > blah_t() {}
};
class blah_t
{
public:
blah_t() {}
blah_t( int = 666 ) {}
};