首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

DECLARE_ALIGNED_8,该如何解决

2012-12-23 
DECLARE_ALIGNED_8最近在vs2008下读一个H264播放器的源代码,但是一直遇到一个编译问题,貌似是和对齐有关的

DECLARE_ALIGNED_8
最近在vs2008下读一个H264播放器的源代码,但是一直遇到一个编译问题,貌似是和对齐有关的,让我很困扰。
都是在   
 DECLARE_ALIGNED_8(int16_t, mv_cache[2][5*8][2]);
 DECLARE_ALIGNED_8(int8_t, ref_cache[2][5*8]);

 DECLARE_ALIGNED_16(DCTELEM, mb[16*24]);
这种地方报错,错误如下:

5>d:\visual studio 2008\vc\include\libavcodec\mpegvideo.h(436) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\mpegvideo.h(436) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(288) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(288) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5>        d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(288) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(289) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(289) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5>        d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(289) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(353) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(353) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5>        d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(353) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(431) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(431) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5>        d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(431) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(450) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(450) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5>        d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(450) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数


5>e:\毕业设计\h264svc\代码\h264player\rtp_player\rtpformatcontext.h(89) : warning C4244: “参数”: 从“int64_t”转换到“unsigned int”,可能丢失数据
5>e:\毕业设计\h264svc\代码\h264player\rtp_player\rtp_player.cpp(274) : error C2039: “error_resilience”: 不是“AVCodecContext”的成员
5>        d:\visual studio 2008\vc\include\libavcodec\avcodec.h(854) : 参见“AVCodecContext”的声明

h264.h文件里用了DECLARE_ALIGNED_8()和DECLARE_ALIGNED_16(),这两个宏能在dsputil.h文件中找到定义:

#ifndef DECLARE_ALIGNED_8
#define DECLARE_ALIGNED_8(t, v)   DECLARE_ALIGNED(8, t, v)
#endif

#define DECLARE_ALIGNED_16(t, v) DECLARE_ALIGNED(16, t, v)

上边的错误到底是为什么呢?迷惑中。难道是因为vs2008这个编译器比较严格吗??请各位大侠指教!


[解决办法]
查一下 DECLARE_ALIGNED的定义

[解决办法]
DECLARE_ALIGNED(8, t, v)
怎么定义和声明的?


[解决办法]
DECLARE_ALIGNED_16 应该是个宏

[解决办法]
VC 下的话

#define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v 


lz 的编译错误应该是没有包含相应的头文件造成的
[解决办法]
vs2008要求数据定义非常严格,经常会碰到。你还是要从参数数据类型下手。具体的我也说不出,我没做过这个。DECLARE_ALIGNED_8(int16_t, mv_cache[2][5*8][2]); 
DECLARE_ALIGNED_8(int8_t, ref_cache[2][5*8]); 
与const uint16_t。注意前面的const. 不知你定义int16_t是什么类型。
[解决办法]
static const int16_t,

热点排行