c++ - "No Matching Constructor"尝试实例化模板类的对象时出错

标签 c++ templates instantiation

编辑:

  1. 对于 this 以及模板类末尾缺少 ; 我感到非常抱歉;我在复制和粘贴代码时遇到了一些问题,所以我手动复制了一些代码并将这些部分弄乱了。
  2. 重新打开 IDE 后,错误神奇地消失了。也许Repl.it有一些问题。现在的错误信息不同了。如果我无法自行解决此错误,我会提出一个新问题。

感谢HugoTeixeira , Matthew Fisher , 和 user4581301为您周到的答复。


我在 Group.h 中有以下代码:

template <typename T, int N> class Group
{
    public:
        T values[N];

        Group(T args[])
        {
            for (int i = 0; i < N; i++)
            {
                values[i] = args[i];
            }
        }

        Group()
        {
            Group((T[]){0, 0, 0});
        }
};

main.cpp 中,我有这段代码:

#include "Group.h"

int main()
{
    Group<double, 3> * v1 = new Group<double, 3>();
}

当我尝试运行这段代码时,我的 IDE 给出了错误:

no matching constructor for initialization of 'Group<double, 3>'

我曾尝试编写这段代码,但去掉了模板,它运行良好。我做错了什么?

最佳答案

您的代码存在一些问题:

调用另一个构造函数:如果你想在 C++ 中调用另一个构造函数,你不能使用 this 关键字(就像在 Java 中一样)。您必须在冒号(又名 initializer list )之后执行此操作,如下所示:

Group(): Group((T[]){0, 0, 0})
{} 

类定义以分号结尾:在 C++ 中,类定义(模板化或非模板化)必须以分号结尾。你忘了把它添加到你的代码中:

class A {
    ...
};  <<--- end with a semi-colon

原始指针:理想情况下,您的代码不应使用原始指针。有智能指针可以让你的代码更优雅,更容易维护。例如,您可以使用 std::unique_ptrstd::shared_ptr(视情况而定)。这是 C++14 中的一个简单示例:

auto v1 = std::make_unique<Group<double, 3>>();

关于c++ - "No Matching Constructor"尝试实例化模板类的对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52022761/

相关文章:

C++非法数字,简单问题

c++ - 如何在 cmake 中使用 SDL2 和 SDL_image

templates - 在play2中,scala模板中的区分大小写不起作用

python-3.x - 创建实例失败时调用的析构函数?

c# - 使用不同的构造函数实例化新对象

c++ - 实例化类时出错

c++ - 为什么这段代码不起作用? C++

c++ - 用泰勒级数计算正弦值时出现的问题

C 宏数据库 - 在另一个宏中测试宏函数的参数

c++ - string_t from(wstring OR string) when string_t 也可以是两者的类型定义