C 多层类模板构造函数不编译
C++ Multi-level Class Template Constructors Do Not Compile
以下多级类模板不编译:
#include <iostream>
using namespace std;
template<typename T>
class A {
private:
A(void);
T _num_;
public:
A(T num): _num_(num){};
void printNum(void){
cout << _num_ << "n";
}
};
template<typename T>
class B : public A<T> {
private:
B(void);
public:
B(T num): A(num){};
};
class C : public B<int> {
private:
C(void);
public:
C(int num): B(num){};
};
int main()
{
/* code */
auto c = C(2);
c.printNum();
return 0;
}
错误:成员初始化器'a'不命名非静态数据成员或B类B(t num):a(num){};
错误:成员初始化器'b'未命名非静态数据成员或基类 c(int num):b(num){};
但是,删除模板符合问题而毫无问题。
#include <iostream>
using namespace std;
class A {
private:
A(void);
int _num_;
public:
A(int num): _num_(num){};
void printNum(void){
cout << _num_ << "n";
}
};
class B : public A {
private:
B(void);
public:
B(int num): A(num){};
};
class C : public B {
private:
C(void);
public:
C(int num): B(num){};
};
int main()
{
/* code */
auto c = C(2);
c.printNum();
return 0;
}
这个问题是语法错误。除了类"继承声明"之外,必须将打字名称t传递给派生类CTOR定义中的基本CTOR调用。
class B : public A<T> {//...
B(T num): A<T>(num){}; //NOTE: <T> added to A ctor call.
和
class C : public B<int> {//...
C(int num): B<int>(num){}; //NOTE: <int> added to B ctor call.
完整编译代码:
#include <iostream>
using namespace std;
template<typename T>
class A {
private:
A(void);
T _num_;
public:
A(T num): _num_(num){};
void printNum(void){
cout << _num_ << "n";
}
};
template<typename T>
class B : public A<T> {
private:
B(void);
public:
B(T num): A<T>(num){};
};
class C : public B<int> {
private:
C(void);
public:
C(int num): B<int>(num){};
};
int main()
{
/* code */
auto c = C(2);
c.printNum();
return 0;
}
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 构造函数和 G++ 编译配方的问题
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 线程构造函数周围的可变参数模板包装器无法编译
- C++根据调用的构造函数强制编译时错误
- 编译错误:临时对象构造函数中缺少参数
- 为什么删除默认构造函数 A::A() 时会编译"A a{};"?
- c++17在编译时将带有已删除复制构造函数的类添加到std::vector
- std::具有initializer_list和size的unordered_map构造函数在main中编译,但不在类定
- 继承的构造函数,在 clang++3.9 中编译,在 g++ 7 中失败
- 为什么在使用转换构造函数编译代码时需要 const 复制构造函数?
- 将参数传递给 c++ 构造函数时出现 VS 编译错误
- 使用 -pedantic 编译时采用 std::reference_wrapper 的不明确构造函数
- 编译如何选择要拨打的构造函数
- 编译时构造函数选择
- C++编译错误是由于使用 std::move 时运动构造函数与其他非运动构造函数之间的冲突
- 显式复制构造函数编译错误
- 如何让g++使用move构造函数编译c++11代码
- C++复制构造函数编译错误