免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13356 | 回复: 16
打印 上一主题 下一主题

[C++] error: `5' cannot be used as a function [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-30 12:38 |只看该作者 |倒序浏览
10可用积分
在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, ...)

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

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

谢谢!

最佳答案

查看完整内容

LOG_NOTICE在sys/syslog.h中有定义:#define LOG_NOTICE 5 /* normal but significant condition */你#include的头文件中可能包含了sys/syslog.h。典型的命名冲突,将LOG_NOTICE改名可以解决这个问题。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 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改名可以解决这个问题。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2008-12-30 12:41 |只看该作者
代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2008-12-30 12:57 |只看该作者
你最好看看预编译的结果,或许define LOG_NOTICE被define成了5

论坛徽章:
0
5 [报告]
发表于 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

论坛徽章:
0
6 [报告]
发表于 2008-12-30 12:59 |只看该作者
感觉上下文有问题。。。多贴一些代码

论坛徽章:
0
7 [报告]
发表于 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你吧参数整个用双引号括起来,或者试试把格式控制符去掉

论坛徽章:
0
8 [报告]
发表于 2008-12-30 13:07 |只看该作者
gcc -L $ACE_ROOT -E CTC_SMG_Handler.cpp -o ctc.txt

我这样预编译行吗?

为什么总是提示找不到ace的头文件

论坛徽章:
0
9 [报告]
发表于 2008-12-30 13:10 |只看该作者
对于使用ACE的工程建议用其自带的mpc,mwc build工具来生成makefile

论坛徽章:
0
10 [报告]
发表于 2008-12-30 13:16 |只看该作者
我说我这问题怎么不一样。。。原来是我在windows下编的ace
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP