gpt4 book ai didi

c++ - 类模板错误

转载 作者:行者123 更新时间:2023-11-28 04:04:30 25 4
gpt4 key购买 nike

全部,

在我的头文件中我有:

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 不是模板类。

所以我有两个问题:

  1. 不必对模板类中的每个函数进行模板化。但是删除 template<class T>来自 .h 和 .cpp 中的构造函数都会产生错误。
  2. 修复错误的最佳方法是什么?基类也应该是模板类吗?

错误是:

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() { }

关于c++ - 类模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58987424/

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