努力理解C ++模板实例化

rup74

我正在编写一个模板类,然后需要编写测试用例来测试我的代码并验证所有方法是否正常工作。在我的测试文件中,我尝试创建Collection的实例,但是出现以下错误:“没有构造函数“ Collection”的实例与参数listC / C ++(289)匹配”。我定义了一个无参数的构造函数,所以我不确定为什么它不起作用。

这是我的类中定义构造函数的部分:

    template <typename Object>
class Collection
{
    // TODO(student): the rest of the template
private:
    Object *objectsArr;
    int maxArrSize = 10;
    int sizeOfCollection = 0;

public:
    Collection()
    {
        objectsArr = new Object[maxArrSize];
    }
    

在测试文件中,我尝试使用以下方法实例化Collection:

Collection<int> testCollection = new Collection();

这是我收到错误消息的地方:“没有构造函数“ Collection”的实例与参数listC / C ++(289)匹配”。

有人可以帮助我了解为什么我收到此错误消息吗?

来自莫斯科的弗拉德

运算符new返回一个指针。

所以这个宣言

Collection<int> testCollection = new Collection<int>();

(您忘了在表达式中使用new运算符指定模板参数的情况)可以想象如下

Collection<int> *p = new Collection<int>();
Collection<int> testCollection = p;

然后编译器尝试找到一个声明为

Collection<int>( Collection<int> * );

因为您要使用Collection<int>运算符new返回的指针来初始化类型的对象

但是类没有这样的带有一个参数的构造函数。

你必须写

Collection<int> *testCollection = new Collection<int>();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++概念:检查模板实例化

相互引用的C ++模板实例化

为什么C ++模板实例化失败?

跨DLL的C ++成员函数显式模板实例化

GCC中的模板实例化与Visual C ++不同

在C ++模板实例化中查找从属名称

GNU C ++和Clang中的模板实例化

具有if语句的C ++模板实例化

使用clang的显式C ++模板实例化

具有复杂类型的C ++模板实例化

从模板实例化后声明的模板函数选择候选中调用的C ++模板过载解析

可以实例化c ++类模板,但是具有相同模板参数的功能模板实例化失败

C ++,使用模板实例化存储对象实例的通用节点

模板实例变量的C ++检查类型

在C ++中的模板实例化中将带有构造函数的类用作类型参数

如何在C ++中编写代码以执行条件模板实例化

C ++中重载乘法运算符的递归类模板实例化期间的错误

C ++解析器如何区分比较和模板实例化?

C ++ 17单独的显式方法模板实例化声明和定义

C ++模板实例化:避免长时间切换

在C ++模板实例化期间获取原始结构/类名称

在可以区分比较和模板实例化之前,C ++解析器会做什么?

C ++ VS2008-类模板实例化上的奇怪错误

在这种情况下,c ++标准是否保证模板实例化?

c ++概念是否导致模板实例化被编写以生成输出?

C++ 模板实例化,错误:非类类型“int”的成员

模板实例化

使用不同的枚举参数时,VC ++函数模板实例化错误C2664

C ++为什么“注意:请参见对正在编译的类模板实例化的引用”