c++ - 类模板错误
问题描述
全部,
在我的头文件中,我有:
template<class T>
__declspec(dllexport) MyClass : public MyBaseClass // line 1
{
public:
template <class T>MyClass(T obj);
~MyClass();
};
在我的 .cpp 文件中,我有:
template<class T> __declspec(dllexport) MyClass::MyClass( T obj ) : MyBaseClass() // line 2
{
// body of the constructor
}
MyClass::~MyClass()
{
}
此代码在 MSVC 2017 上出错。MyBaseClass 不是模板类。
所以我有两个问题:
- 不必对模板类中的每个函数进行模板化。但是
template<class T>
从 .h 和 .cpp 中的构造函数中删除会产生错误。 - 修复错误的最佳方法是什么?基类也应该是模板类吗?
错误是:
missing type specifier - int assumed // at line 1
left of :: must be class/struct/union // at line 2
[编辑]
提供更多背景:
我有 2 个结构,它们的区别在于需要推入此类的一个额外成员。所以我决定把它做成一个模板类,并根据类型调用构造函数。
我真的不想重载构造函数,因为它只是一个代码复制粘贴,这不是一个好的设计。
[/编辑]
解决方案
修复代码中缺少的一些关键字并将构造函数模板参数更改为R
,因为您已经T
在类中使用,您可以执行以下操作:
//header
template<class T>
class __declspec(dllexport) MyClass : public MyBaseClass {
public:
template <class R>
MyClass(R obj);
~MyClass();
};
//cpp file
template<class T>
template<class R>
//template<class T, class R> does not work
__declspec(dllexport) MyClass<T>::MyClass<R>(R obj) : MyBaseClass() {}
template<class T>
MyClass<T>::~MyClass() {}
如果您的意思是只有一种模板化类型,则无需指定要模板化的构造函数:
//header
template<class T>
class __declspec(dllexport) MyClass : public MyBaseClass {
public:
MyClass(T obj);
~MyClass();
};
//cpp file
template<class T>
__declspec(dllexport) MyClass<T>::MyClass(T obj) : MyBaseClass() {
// body of the constructor
}
template<class T>
MyClass<T>::~MyClass() { }
推荐阅读
- python - music21 write() 函数给出 AttributeError:'Rest' 对象在 python 3.9.1 和 music21 版本 7 上没有属性 'pitches'
- angular - 为什么当我在 Angular 中路由时没有触发警卫?
- node.js - useState 数据不适用于 .map 函数
- python - 熊猫:更改表结构
- c# - 在 .NET Core 中从 .NET Framework 使用 WCF 服务
- sql - Nestjs typeorm (pgsql) 中的 UPDATE 是如何工作的?
- javascript - Cypress/Javascript - 如何等待一个元素没有类?
- php - 下拉菜单和单选按钮不粘
- java - 将应用程序部署到 aws 时发送邮件不起作用
- reactjs - React Native unought typeerror: u.split is not a function