模板静态属性初始化

ilovedrv 2008-08-25 10:19:25
在.h文件中
template <typename T>

struct Image
{
....

public:
static const int NBITS_PER_PIXEL; ///< 每一个像素的bit数

....
}

在.cpp文件中
template <typename T> const int Image<float>::NBITS_PER_PIXEL = 32;

template <typename T> const int Image<unsigned char>::NBITS_PER_PIXEL = 8;

这样做的话,在windows下vc编译通过,可是在linux的gcc下编译器内部错误,不知道是不是标准c++不支持静态变量的不同类型初始化,还是有其它替代的做法,希望大侠指教
...全文
106 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2008-08-25
  • 打赏
  • 举报
回复
template <typename T> const int Image <float>::NBITS_PER_PIXEL = 32;

template <typename T> const int Image <unsigned char>::NBITS_PER_PIXEL = 8;
================
这段代码看起来就有点问题:前面是T,而后面分别是float, unsigned char。前面template <typename T>
不写试试吧。
  • 打赏
  • 举报
回复
头文件这样写
template <typename T> 
struct Image
{
public:
static const int NBITS_PER_PIXEL; /// < 每一个像素的bit数
} ;

template <>
const int Image<float>::NBITS_PER_PIXEL = 32;

template <>
const int Image<unsigned char>::NBITS_PER_PIXEL = 8;
ttkk_2007 2008-08-25
  • 打赏
  • 举报
回复
特化一下
jieao111 2008-08-25
  • 打赏
  • 举报
回复
谁那有标准?
ilovedrv 2008-08-25
  • 打赏
  • 举报
回复
试了,还是不行啊,在gcc下面,好像只能对static类型初始化一次,记如下:
template <typename T> int Image<T>::flag = 10;
不能根据T的类型初始化不同的值
xqls_xqls 2008-08-25
  • 打赏
  • 举报
回复
在头文件中初始化。
e_sharp 2008-08-25
  • 打赏
  • 举报
回复
const int Image <float>::NBITS_PER_PIXEL = 32;

const int Image <unsigned char>::NBITS_PER_PIXEL = 8;

这样应该没有问题
ilovedrv 2008-08-25
  • 打赏
  • 举报
回复
是在.h里面初始化,然后其他地方引用吗
hai040 2008-08-25
  • 打赏
  • 举报
回复
不能在cpp实现吧,要写在头文件
ilovedrv 2008-08-25
  • 打赏
  • 举报
回复
编译器内部错误: 在 import_export_decl 中,于 cp/decl2.c:1962
请提交一份完整的错误报告,
如有可能请附上经预处理后的源文件。
具体步骤请参见 <URL:http://gcc.gnu.org/bugs.html>。
For Debian GNU/Linux specific bug reporting instructions,
see <URL:file:///usr/share/doc/gcc-4.2/README.Bugs>.
fibbery 2008-08-25
  • 打赏
  • 举报
回复
gcc下的错误提示是什么?
ilovedrv 2008-08-25
  • 打赏
  • 举报
回复
上面写错了,在vc下面不需要

在.cpp文件中
const int Image <float>::NBITS_PER_PIXEL = 32;

const int Image <unsigned char>::NBITS_PER_PIXEL = 8;
ilovedrv 2008-08-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 akirya 的回复:]
头文件这样写

C/C++ codetemplate <typename T>
struct Image
{
public:
static const int NBITS_PER_PIXEL; /// < 每一个像素的bit数
} ;

template <>
const int Image<float>::NBITS_PER_PIXEL = 32;

template <>
const int Image<unsigned char>::NBITS_PER_PIXEL = 8;
[/Quote]

此为正解

64,687

社区成员

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

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