【发布时间】:2018-08-26 02:36:37
【问题描述】:
编辑:
- 我很抱歉
this以及在我的模板类末尾缺少;;我在复制和粘贴代码时遇到了一些问题,因此我手动复制了一些代码并将这些部分弄乱了。 - 重新打开 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>'
我曾尝试编写此代码,但减去了模板,它运行良好。我做错了什么?
【问题讨论】:
-
this((T[]){0, 0, 0})没有意义,does not compile。 -
您在挑选错误消息。在到达
main()之前,至少会诊断出两个错误和一个可能触发警告(全部在头文件中)的可疑代码构造,它们将导致编译器对不带参数的构造函数的存在感到困惑(并因此诊断您报告的错误)。 -
旁注:将一个包含三个元素的数组放入一个期望
N-element 数组的构造函数中是个坏主意。如果T是std::string怎么办?零没有多大意义。 -
@user4581301 射击,你是对的。我不知道我在想什么。
-
请不要在回答后这样编辑问题。如果您愿意,可以发布一个新问题
标签: c++ templates instantiation