此:
非类型模板参数必须是标量类型
是我尝试使用Turbo C ++ 4.5构建此程序时出现的错误。我有一些错误,如:
非类型模板参数是指没有链接的函数
但这个错误对我来说是全新的。代码有什么问题?
#include<iostream.h>
template<class T1=int,class T2=int>
class tempex
{
T1 a;
T2 b;
public:
tempex(T1 x,T2 y)
{
a=x;
b=y;
}
void show()
{
cout<<"A= \t"<<a<<"\tB=\t"<<b;
}
};
int main()
{
tempex <float,int> te1(1.23,123);
te1.show();
return 0;
}
答案 0 :(得分:9)
您似乎使用的是古老的编译器。尝试使用现代的免费软件,例如VC ++ 2013 Express Edition。您将收到更合适的错误消息:
fatal error C1083: Cannot open include file: 'iostream.h' :
No such file or directory
通过将<iostream.h>
更改为<iostream>
来解决此问题,您将获得:
error C2065: 'cout' : undeclared identifier
如果您通过将cout
更改为std::cout
来解决此问题,则代码将仅使用一个警告进行编译:
warning C4305: 'argument' : truncation from 'double' to 'float'
通过将1.23
更改为1.23f
来解决此问题。
我们走了。一个完整的,现代的C ++程序。
答案 1 :(得分:8)
Turbo C ++ 4.5从1994年开始!直到1998年,C ++甚至都没有标准化。那么,你的陈旧软件无法解析这个[差不多]有效的C ++程序,这就不足为奇了。
1994年还发生了什么?嗯,让我们看看:
你真的应该使用本世纪的东西,比如GCC 4.9或Microsoft Visual Studio 2013;您可以使用像GCC 4.1或Visual Studio 2005这样的“旧”编译器,它仍然比您已经挖掘的恐龙还要小十年。你甚至在哪里找到它?!