C++ 模板类的构造函数问题

很简单的问题。#include<stdio.h>template<classT>classabc{public:abc(Tab){m_abc=ab;}Tget(){ret... 很简单的问题。

#include <stdio.h>

template <class T> class abc
{
public:
abc(T ab)
{
m_abc=ab;
}
T get()
{
return m_abc;
}
private:
T m_abc;
};

void main()
{
abc<int> a(123);
printf("%d\n",a.get());
}

上面的测试成功了,但如果我把类的定义放到外面:

#include <stdio.h>

template <class T> class abc
{
public:
abc(T ab);
T get();
private:
T m_abc;
};

abc::abc(T ab)
{
m_abc=ab;
}

T abc::get()
{
return m_abc;
}

void main()
{
abc<int> a(123);
printf("%d\n",a.get());
}

就会错误连天,是那些地方写错了?
问题解决了,谢谢1楼的,
还有个问题:
如果类里的函数这么声明:
abc& get()
{
return *this;
}
在外部应该怎么写?
也就是返回引用。

非常感谢4楼的回答者,我是为了节省时间加上说明的准确,随便举的例子;一些小的功能我尽量用C中的函数,执行效率更快。
展开
 我来答
q嘿仔
2009-05-30 · TA获得超过2879个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:182万
展开全部
一楼的说的是正确的:
template <class Type>
abc<T>::abc(T ab)
{
m_abc=ab;
}
...
但是我还是决定在说说class template的有关问题,因为你这个问题解决了,另一个问题也就来了:如果在abc.h中写:
template <class T> class abc
{
public:
abc(T ab);
T get();
private:
T m_abc;
};
那么在abc.cpp中如何定义abc中的函数呢?
是template <class T>
abc<T>::abc(T ab)
{
m_abc=ab;
}吗?
答案是否定的!(怎么跟一般的类定义不同)
C++标准委员会对于这个问题进行了一次表决(允不允许类模板(class template)中的成员函数声明在别的文件中定义,最后的结果是允许(引进了一个关键字export类处理次问题),但是标准库制定出来5年后(2003年)才有一个编译器支持这个功能!就连现在的visual studio 2008 也不支持export关键字!
但是既然有编译器支持,我就给你说一下用法:
export emplate <class T>
abc<T>::abc(T ab)
{
m_abc=ab;
}
就可以了!
可能你不觉得,你的编程习惯很不好(C与C++混用),用“标准”的写法是:
#include <iostream>

template <class T> class abc
{
public:
explicit abc(T ab):m_abc(ab){ }
T get() const
{
return m_abc;
}
private:
T m_abc;
};

int main()
{
abc<int> a(123);
std::cout << a.get() << std::endl;
return 0;
}
还有一些命名(准则)问题,如类一般用第一个字母大些的形式表示等都要注意了,这直接影响到一个程序的可读性(条理性)!
现在的形式不容乐观:C++0x可能今年年底就出来了,但是几乎100%兼容旧标准(C++98,C++03),所以改进时不断的,要加油哦~~~
补充:
abc& get()
{
return *this;
}
应写为:
template <class T>
abc<T>& abc<T>::get()
{
return *this;
}
梦想窗外
2009-05-30 · TA获得超过1588个赞
知道大有可为答主
回答量:1180
采纳率:0%
帮助的人:1562万
展开全部
template <class T>
abc<T>::abc(T ab)
{
m_abc=ab;
}

template <class T>
T abc<T>::get()
{
return m_abc;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangdi190
2009-05-30 · TA获得超过164个赞
知道答主
回答量:88
采纳率:0%
帮助的人:43.6万
展开全部
你定义的m_abc这个是private,外面是不能访问他的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wanfustudio
2009-05-30 · TA获得超过1万个赞
知道大有可为答主
回答量:5513
采纳率:100%
帮助的人:3750万
展开全部
template <class T>
这个每个函数都要写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式