非类型模板参数必须是C ++中的标量类型错误?

时间:2014-08-16 18:45:12

标签: c++ templates turbo-c++

此:

  

非类型模板参数必须是标量类型

是我尝试使用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;
}

2 个答案:

答案 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年还发生了什么?嗯,让我们看看:

  • 宣布西半球无脊髓灰质炎;
  • Netscape Communications为其Netscape Navigator Web浏览器创建HTTP Secure;
  • 索尼发布了第一款Playstation;
  • U.S。比尔克林顿总统发表了他的第一份国情咨文;
  • Apple Computer,Inc。发布第一台使用新PowerPC微处理器的Macintosh电脑(这被认为是个人电脑的一次重大飞跃);
  • 纳尔逊曼德拉就任南非首位黑人总统;
  • Sega为Mega Drive发布了Sonic 3;
  • MRS。家庭视频(VHS)上有Doubtfire。

你真的应该使用本世纪的东西,比如GCC 4.9或Microsoft Visual Studio 2013;您可以使用像GCC 4.1或Visual Studio 2005这样的“旧”编译器,它仍然比您已经挖掘的恐龙还要小十年。你甚至在哪里找到它?!