菜鸟提问:class template , static class member

shex4 2009-07-06 11:13:31
编程时遇到一个问题,简单说情况如下:

头文件:silly.h

#ifndef silly_h_
#define silly_h_

#include < vector >
using std::vector ;

template < typename T , int m > // class A 基于两个参数,一个是任意类型,一个是 int .
class A{
protected:
vector<T> group ;
static int limit ; // static class member

public:
int Limit() { return A::limit ; }
A() ;
};


#endif



相关的 .cc 文件

#include "silly.h"

template < typename T , int m > // 初始化静态成员
int A<T, m > ::limit = 0 ;

template < typename T , int m > // 给静态成员赋值
A<T,m>::A()
{
limit = m ;
}



主程序:

int main ()

{
A<int , 5 > a1 ;
A<int, 7 > a2 ;
cout << a1.Limit() << endl; // 希望输出结果是 5 和 7
cout << a2.Limit() << endl;

return 0;
}

可以编译 , 但是不能运行,fatal error LNK1120: 1 unresolved externals。 向大家请教。
我的想法就是,程序运行时有两个 limit, 一个属于 A<int, 5> 这个类, 还有一个属于 A<int, 7> 这个类。


...全文
76 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
大海啊全是水 2009-07-06
  • 打赏
  • 举报
回复
可以不放在一个文件里面 那silly.h文件就要包含cpp
#include "silly.cpp"
shex4 2009-07-06
  • 打赏
  • 举报
回复
用的微软那个vc2008 免费版 。

学习了,多谢。
shex4 2009-07-06
  • 打赏
  • 举报
回复
oh, 看来是没办法了, 谢谢大虾们。 以后模板全写一个文件里好了。
baihacker 2009-07-06
  • 打赏
  • 举报
回复
一般的编译器不支持分离模型.

export
shex4 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
.cc文件里面的内容拷贝到头文件中
[/Quote]

谢谢, 不过没有其他办法么?

类似的情况,如果class 不是 templated, 分两个文件写没有问题啊。为什么模板化以后非要写在一起?

lingyin55 2009-07-06
  • 打赏
  • 举报
回复
模板的声明和定义都放头文件里面
coverallwangp 2009-07-06
  • 打赏
  • 举报
回复
lz用的什么编译器,有的编译器不支持模板分开编译。
baihacker 2009-07-06
  • 打赏
  • 举报
回复
模板不要分开...
丢在头文件里.
  • 打赏
  • 举报
回复
.cc文件里面的内容拷贝到头文件中

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧