【发布时间】:2013-04-11 11:39:57
【问题描述】:
我必须能够使用下面的命令,其中 T 可以是任何类型,例如字符串。
Counter<T> counter;
计数器应该能够容纳多个项目,因此我选择将其实现为向量。每个项目本身必须包含一个类型为 T 的变量(如果我们继续上面的示例,则为一个字符串)和一个 int。我需要使解决方案尽可能简单,因为稍后我将需要创建函数,通过在其他任务中降低 int 值来打印出每个项目。我尝试了以下代码,但 1)它不起作用,2)有更好的解决方案吗?
#include<string>
#include<cstdlib>
#include<vector>
template<class T>
class Record{
T itemtype;
int total;
public:
int increment(T item);
int count(T item);
void printSummary();
};
class Counter{
vector<Record> data;
};
int main(){
Counter<string> counter;
return 0;
}
【问题讨论】:
-
请解释一下“它不起作用”是什么意思。
-
我们看不到 Record 的实现,而且您使用 Counter 作为模板类,但实际上 它不是模板,并且您没有为 Record 指定模板参数...
-
计数器类也应该是模板。
-
@Drew Dormann $ g++ Counter2.h -o Counter2 Counter2.h:17:7: 错误:“向量”没有命名类型 Counter2.h:在函数“int main()”中: Counter2.h:22:4:错误:'Counter' 不是模板 Counter2.h:22:12:错误:'string' 未在此范围内声明 Counter2.h:22:12:注意:建议的替代方案:/ usr/lib/gcc/i686-redhat-linux/4.6.3/../../../../include/c++/4.6.3/bits/stringfwd.h:65:33:注意:'std ::字符串'