Chinaunix

标题: error: `5' cannot be used as a function [打印本页]

作者: GodPig    时间: 2008-12-30 12:38
标题: error: `5' cannot be used as a function
在Windows下面好好的代码,现在拿到linux下面,一编译,错误一大堆

error: `5' cannot be used as a function

出现这个问题的地方的代码是:
LOG_NOTICE("process msg(%i) failed!\n", msg_id);

LOG_NOTICE是一个宏,后来我把它改成什么也不做:
#define LOG_NOTICE(FMT, ...)

但是一编译就出现这样的错误

这有问题吗?如果宏定义为空,则不生成代码吧,为什么还会出现这样的错误呢

谢谢!
作者: happy_fish100    时间: 2008-12-30 12:38
标题: 回复 #1 GodPig 的帖子
LOG_NOTICE在sys/syslog.h中有定义:
#define LOG_NOTICE      5       /* normal but significant condition */

你#include的头文件中可能包含了sys/syslog.h。
典型的命名冲突,将LOG_NOTICE改名可以解决这个问题。
作者: cjaizss    时间: 2008-12-30 12:41
代码
作者: cjaizss    时间: 2008-12-30 12:57
你最好看看预编译的结果,或许define LOG_NOTICE被define成了5
作者: GodPig    时间: 2008-12-30 12:59
定义:
#define LOG_NOTICE(FMT, ...) /*\
do { \
int __ace_error = ACE_Log_Msg::last_error_adapter(); \
ACE_Log_Msg * ace___ = ACE_Log_Msg::instance(); \
ace___->conditional_set(__FILE__, __LINE__, 0, __ace_error); \
ace___->log(LM_NOTICE, NOTICE_PREFIX FMT, __VA_ARGS__); \
} while (0)*/

使用:
result = processor_->process_one_msg(msg_id);
if (-1 == result) {
        LOG_NOTICE("process msg(%i) failed!\n", msg_id);
        return 0;
}

编译错误就是:
error: `5' cannot be used as a function
作者: 5毛党党员    时间: 2008-12-30 12:59
感觉上下文有问题。。。多贴一些代码
作者: alexhappy    时间: 2008-12-30 13:02
原帖由 GodPig 于 2008-12-30 12:59 发表
定义:
#define LOG_NOTICE(FMT, ...) /*\
do { \
int __ace_error = ACE_Log_Msg::last_error_adapter(); \
ACE_Log_Msg * ace___ = ACE_Log_Msg::instance(); \
ace___->conditional_set(__FILE__, __LIN ...

LZ你吧参数整个用双引号括起来,或者试试把格式控制符去掉
作者: GodPig    时间: 2008-12-30 13:07
gcc -L $ACE_ROOT -E CTC_SMG_Handler.cpp -o ctc.txt

我这样预编译行吗?

为什么总是提示找不到ace的头文件
作者: zhoubug    时间: 2008-12-30 13:10
对于使用ACE的工程建议用其自带的mpc,mwc build工具来生成makefile
作者: 5毛党党员    时间: 2008-12-30 13:16
我说我这问题怎么不一样。。。原来是我在windows下编的ace
作者: cjaizss    时间: 2008-12-30 13:16

  1. find . -type f \( -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.cc' '\)|{ while read i;do sed 's/\<LOG_NOTICE\>/LOG_NOTICE_LX/' $i >/tmp/_$$.$$;yes|cp -f  /tmp/_$$.$$ $i;done;rm -f /tmp/_$$.$$; }
复制代码

处理之后,再编译一下看看

[ 本帖最后由 cjaizss 于 2008-12-30 13:30 编辑 ]
作者: cjaizss    时间: 2008-12-30 13:25
应该是重名的问题,改一下就行了
作者: GodPig    时间: 2008-12-30 13:36
恩,谢谢
刚改了一下
有名字的问题

改了之后好多了,不过现在又出现了新的问题
作者: cookis    时间: 2008-12-30 13:55
windows 下 没有__VA_ARGS__这个宏
作者: GodPig    时间: 2008-12-30 14:19
原帖由 cookis 于 2008-12-30 13:55 发表
windows 下 没有__VA_ARGS__这个宏


有呀
我在vs2005里面编译,通过
作者: cjaizss    时间: 2008-12-30 14:24
新的问题是什么问题?
作者: GodPig    时间: 2008-12-30 15:31
原帖由 cjaizss 于 2008-12-30 14:24 发表
新的问题是什么问题?


哦,现在已经解决了

主要是里面用了一些在linux下面不能用的

如:
sizeof var  要改成  sizeof(var)
UINT  要改成 unsigned int

还包括了WinSock2.h
等等

不过要改的地方也不是太多,基本就这几个问题

谢谢大家了!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2