《stl源码剖析》第二级配置器代码编译不过

nevermorewish 2012-12-16 01:07:50

enum {__ALIGN = 8}; //上调边界
enum {__MAX_BYTES =128}; //小型区块的上限
enum {__NFREELISTS = __MAX_BYTES/__ALIGN}; //free_lists 个数
//第二级配置器
template<bool threads, int inst>
class __default_alloc_template
{
private:
//节点结构
union obj
{
union obj * free_list_link;
char client_data[1];
};
private:
static obj* volatile free_list[__NFREELISTS];
};
//在这里编译不过,vc2010
template<bool threads,int inst>
__default_alloc_template<threads,inst>::obj* volatile
__default_alloc_template<threads.inst>::free_list[__NFREELISTS]=
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};

1,这里free_list[__NFREELISTS]是个obj*数组,volatile 修饰obj类型,让编译器不要去优化
错误提示如下

error C1903: unable to recover from previous error(s); stopping compilation
error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int


2,我认为下面的给静态变量赋值的代码应该是

template<bool threads,int inst>
__default_alloc_template<threads,inst>::obj* volatile
free_list[__NFREELISTS]=
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};

上面的语法该如何解释呢

...全文
145 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nevermorewish 2012-12-16
  • 打赏
  • 举报
回复
引用 1 楼 supermegaboy 的回复:
__default_alloc_template<threads.inst>::free_list中的threads.inst应为threads,inst。 还有,__default_alloc_template<threads,inst>::obj*前应有typename修饰。 对于第二个问题,free_list是__default_alloc_templa……
牛人啊,编译过了,书上都没有typename修饰的,不过细想一下的确需要加上typename 第二个问题可以这么理解么__default_alloc_template<threads,inst>::obj* volatile 是取 __default_alloc_template的内嵌类型声明? __default_alloc_template<threads.inst>::free_list[__NFREELISTS]是取得__default_alloc_template<threads,inst>类中的变量free_list?
飞天御剑流 2012-12-16
  • 打赏
  • 举报
回复
__default_alloc_template<threads.inst>::free_list中的threads.inst应为threads,inst。 还有,__default_alloc_template<threads,inst>::obj*前应有typename修饰。 对于第二个问题,free_list是__default_alloc_template的静态成员,在类外定义时应加上__default_alloc_template<threads,inst>限定词,这是基本语法。 聚集元素与聚集本身是两件不同的物件,因此obj*前的限定词仅能用来修饰obj*,是不能同时用来修饰free_list的,这个道理跟函数形参与返回值之间的不同类似。

64,647

社区成员

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

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