我收到以下错误:错误C2955:'MagicBag':使用类模板需要模板参数列表。这发生在我的主类的第5行,如下所示:
#include "stdafx.h"
#include "MagicBag.h"
int main() {
MagicBag<int> mb1;//this is where I'm getting the error
mb1.insert(5);
mb1.insert(4);
return 0;
}
我已经调查了这个错误(现在几个小时),据我所知,这是因为我没有给出声明模板参数。但是,通过在钻石运算符中加入“int”,这不就是我正在做的吗?我正在努力确保我的插入方法正常工作,但我似乎无法正确声明一个MagicBag对象。下面是MagicBag.h文件。
#pragma once
#include <iostream>
using namespace std;
template <class T> struct node {
T value;
node<T> * next;
};
template<class T> class MagicBag {
public:
MagicBag() {
first = NULL;
}
~MagicBag() {
}
void insert(T item) {
size++;
node<T> a;
a.value = item;
if (first == NULL) {
a.next = NULL;
}
else {
a.next = first;//set a.next to point to node pointed to by first
}
first = &a;//set first to point to a
}
private:
node<T> * first;
int size = 0;
};
此时我已经尝试了所有的东西,将T放在钻石操作员的几乎任何我能想到的地方,包括在MagicBag.h文件中。我知道这是一个常见的问题(谷歌和这个网站上有很多结果)我应该能够自己管理它,但对于我的生活,我不明白我错过了什么。为什么我的MagicBag对象声明不足?对于其他人(如here,似乎是他们调用Node而不是Node(T)的问题(我不能让钻石运算符中的T显示),但我没有看到任何人我在我的代码中执行此操作的实例。尝试将T放在构造函数中的菱形运算符中也无法解决问题,因此对于我的生活我感到难过。感谢任何人可能愿意提供的任何帮助。