Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527899
  • 博文数量: 55
  • 博客积分: 1520
  • 博客等级: 上尉
  • 技术积分: 661
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-19 22:01
文章存档

2013年(1)

2012年(1)

2011年(7)

2010年(16)

2009年(30)

我的朋友

分类: C/C++

2009-07-21 10:21:40

先看如下这个程序
#include
using namespace std;

template
class Var
{
public:
    Var(){};
    Var(Type src);
    ~Var(){};
    void output() const;
private:
    Type member;
};

template
Var::Var(Type src)
{
    member = src;
}

template
void Var::output() const
{
    cout<< member<< endl;
}

int main(int argc, char **argv)
{
    Var i = 10;                             // (1)
    Var c = 'a';                           // (2)
    Var Str = "Google";                  // (3)
    i.output();
    c.output();
    Str.output();
    return 0;
}
编译报告(3)这行有错。
改成如下Var Str = (string)"Google"或Var Str = string("Google")就可以了。
为什么(1)和(2)就可以直接赋值,而(3)报错呢?
原因就是:编译器不会对模板函数作隐式转换。
阅读(1734) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~