一个开源项目,编译不过去,求助-.-

sunjor 2014-08-26 09:09:28
以下是宏定义

#define IMPLEMENT_SERIALIZE(statements) \
unsigned int GetSerializeSize(int nType, int nVersion) const \
{ \
CSerActionGetSerializeSize ser_action; \
const bool fGetSize = true; \
const bool fWrite = false; \
const bool fRead = false; \
unsigned int nSerSize = 0; \
ser_streamplaceholder s; \
assert(fGetSize||fWrite||fRead); /* suppress warning */ \
s.nType = nType; \
s.nVersion = nVersion; \
{statements} \
return nSerSize; \
} \
template<typename Stream> \
void Serialize(Stream& s, int nType, int nVersion) const \
{ \
CSerActionSerialize ser_action; \
const bool fGetSize = false; \
const bool fWrite = true; \
const bool fRead = false; \
unsigned int nSerSize = 0; \
assert(fGetSize||fWrite||fRead); /* suppress warning */ \
{statements} \
} \
template<typename Stream> \
void Unserialize(Stream& s, int nType, int nVersion) \
{ \
CSerActionUnserialize ser_action; \
const bool fGetSize = false; \
const bool fWrite = false; \
const bool fRead = true; \
unsigned int nSerSize = 0; \
assert(fGetSize||fWrite||fRead); /* suppress warning */ \
{statements} \
}


下面是使用宏的位置报错了

IMPLEMENT_SERIALIZE(({
if (!fRead) {
uint64 nVal = CompressAmount(txout.nValue);
READWRITE(VARINT(nVal));
} else {
uint64 nVal = 0;
READWRITE(VARINT(nVal));
txout.nValue = DecompressAmount(nVal);
}
CScriptCompressor cscript(REF(txout.scriptPubKey));
READWRITE(cscript);
});)

错误信息是1>d:\svn\works\twister\twister-core\trunk\src\addrman.h(381): error C2059: 语法错误:“{”
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunjor 2014-08-26
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
[quote=引用 4 楼 sunjor 的回复:] [quote=引用 3 楼 sunjor 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
谢谢,我先试试[/quote] 不行,我引入了boost库,直接展开宏的话会导致编译不过去的[/quote] 不是展开宏编译整个项目,是只编译你不明白的哪个cpp文件。[/quote] 宏的定义和使用都是在.h文件中的,无法单独展开
赵4老师 2014-08-26
  • 打赏
  • 举报
回复
引用 4 楼 sunjor 的回复:
[quote=引用 3 楼 sunjor 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
谢谢,我先试试[/quote] 不行,我引入了boost库,直接展开宏的话会导致编译不过去的[/quote] 不是展开宏编译整个项目,是只编译你不明白的哪个cpp文件。
sunjor 2014-08-26
  • 打赏
  • 举报
回复
引用 3 楼 sunjor 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] 编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
谢谢,我先试试[/quote] 不行,我引入了boost库,直接展开宏的话会导致编译不过去的
sunjor 2014-08-26
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
谢谢,我先试试
赵4老师 2014-08-26
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
sunjor 2014-08-26
  • 打赏
  • 举报
回复
编辑不了-.-,使用宏的地方上的颜色

   IMPLEMENT_SERIALIZE(({
        if (!fRead) {
            uint64 nVal = CompressAmount(txout.nValue);
            READWRITE(VARINT(nVal));
        } else {
            uint64 nVal = 0;
            READWRITE(VARINT(nVal));
            txout.nValue = DecompressAmount(nVal);
        }
        CScriptCompressor cscript(REF(txout.scriptPubKey));
        READWRITE(cscript);
    });)
sunjor 2014-08-26
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
[quote=引用 6 楼 sunjor 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] [quote=引用 4 楼 sunjor 的回复:] [quote=引用 3 楼 sunjor 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
谢谢,我先试试[/quote] 不行,我引入了boost库,直接展开宏的话会导致编译不过去的[/quote] 不是展开宏编译整个项目,是只编译你不明白的哪个cpp文件。[/quote] 宏的定义和使用都是在.h文件中的,无法单独展开[/quote] 那你不会自己写一小段调用宏的代码放在一个test.cpp中,然后编译这个test.cpp吗?[/quote] 好的,谢谢你的热心
赵4老师 2014-08-26
  • 打赏
  • 举报
回复
引用 6 楼 sunjor 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] [quote=引用 4 楼 sunjor 的回复:] [quote=引用 3 楼 sunjor 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] 编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
谢谢,我先试试[/quote] 不行,我引入了boost库,直接展开宏的话会导致编译不过去的[/quote] 不是展开宏编译整个项目,是只编译你不明白的哪个cpp文件。[/quote] 宏的定义和使用都是在.h文件中的,无法单独展开[/quote] 那你不会自己写一小段调用宏的代码放在一个test.cpp中,然后编译这个test.cpp吗?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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