警告:不能通过 ‘...’ 传递有非简单旧数据类型 ‘const struct std::basic_string

quwei197874 2012-07-23 01:52:41
请问这个问题如何解决?
printf("#connect kv error host[%s] port[%d]#", host.c_str(), port);
把这句用宏定义就会出现标题里的警告?
...全文
556 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-07-24
  • 打赏
  • 举报
回复
不知道下面这样写,是否能楼主的意图?

#include <iostream>
#include <string>
using namespace std;

#define PR(host, port) printf("#connect kv error host[%s] port[%d]#", host.c_str(), port)

int main(int argc, char** argv)
{
string host = "192.168.1.101";
int port = 1001;
PR(host, port);

return 0;
}
陈厚来 2012-07-23
  • 打赏
  • 举报
回复
猜得没错的话,很明显的,你的port或host,在宏定义里是另一个字符串参数,导致出差错了。
quwei197874 2012-07-23
  • 打赏
  • 举报
回复
我是define了好几行,这行printf("#connect kv error host[%s] port[%d]#", host.c_str(), port);在里面的
baichi4141 2012-07-23
  • 打赏
  • 举报
回复
问问题不贴出错的代码,反而把没错的代码贴上来?
从警告内容里可以看出,十有八九是define的时候host.c_str()被define错了,所以才说printf函数不接受host这种标准库类云云
这种问题不贴define那一行,谁知道你怎么错的?
shen_wei 2012-07-23
  • 打赏
  • 举报
回复
float f,c;
#define pri printf("f=%g\nc=%g\n",f,c)

int _tmain(int argc, _TCHAR* argv[])
{
f=64.0f;
c=(5.0f/9.0f)*(f-32.0f);
pri;
return 0;
}


这样测试OK。。。

不知道你是怎么定义的!!!
shen_wei 2012-07-23
  • 打赏
  • 举报
回复
printf("#connect kv error host[%s] port[%d]#", host.c_str(), port);

这个用宏定义???
tanmeining 2012-07-23
  • 打赏
  • 举报
回复
命令空间?在两个参数前面加个强制转换试试?或者把这个宏前面的代码(包括头文件)都贴出来看看...
报错的完整信息也贴出来下...
W170532934 2012-07-23
  • 打赏
  • 举报
回复
好像没看出什么问题呢
pathuang68 2012-07-23
  • 打赏
  • 举报
回复
沙发,没看出啥问题。

64,648

社区成员

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

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