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


请问这个问题如何解决?
printf("#connect kv error host[%s] port[%d]#", host.c_str(), port);
把这句用宏定义就会出现标题里的警告?

10 个解决方案

#1


沙发,没看出啥问题。

#2


好像没看出什么问题呢

#3


命令空间?在两个参数前面加个强制转换试试?或者把这个宏前面的代码(包括头文件)都贴出来看看...
报错的完整信息也贴出来下...

#4


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

这个用宏定义???

#5


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。。。

不知道你是怎么定义的!!!

#6


问问题不贴出错的代码,反而把没错的代码贴上来?
从警告内容里可以看出,十有八九是define的时候host.c_str()被define错了,所以才说printf函数不接受host这种标准库类云云
这种问题不贴define那一行,谁知道你怎么错的?

#7


我是define了好几行,这行printf("#connect kv error host[%s] port[%d]#", host.c_str(), port);在里面的

#8


猜得没错的话,很明显的,你的port或host,在宏定义里是另一个字符串参数,导致出差错了。

#9


该回复于2012-07-24 08:29:23被版主删除

#10


不知道下面这样写,是否能楼主的意图?

#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;
}
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告