gpt4 book ai didi

c++ - 代码内联工作,但在类里面

转载 作者:行者123 更新时间:2023-11-28 07:34:29 24 4
gpt4 key购买 nike

我正在使用 Boost::Asio 编写程序,我想实现简单的聊天。目前我正在努力解决以下问题:当我将一些代码内联到类函数中时它可以正常工作,但是当另一个类对象提供相同的代码时却不行。我认为它可以连接到 Boost::Asio,但我不确定:

void Connection::session(socket_ptr sock)
{
try{
for(;;) {
char mesg[1024];

boost::system::error_code error;
size_t length = sock->read_some(boost::asio::buffer(mesg), error);

if (error == boost::asio::error::eof){
disconnected(sock);
break;
}
else if (error)
throw boost::system::system_error(error);

message msg(mesg,length);
char *data;
data = msg.getData();
std::cout << "In session " << strlen(data) << " " << data;

/*This is working
string s_msg,s_data;
s_msg = mesg;
s_data = s_msg.substr(2,length);
std::vector<char> writable(s_data.size() + 1);
std::copy(s_data.begin(), s_data.end(), writable.begin());
std::cout << "In session " << strlen(&writable[0]) << " " << &writable[0];
send_all(sock,&writable[0],strlen(&writable[0]));
*/

send_all(sock,data,strlen(data));
}
}
catch (std::exception& e){
std::cerr << "Exception in thread: " << e.what() << "\n";
}
}

只解析数据的类消息

  message::message(char *c_msg, size_t length)
{
msg = c_msg;
id = msg.at(0);
data = msg.substr(2,length);
}

char* message::getData()
{
std::vector<char> writable(data.size() + 1);
std::copy(data.begin(), data.end(), writable.begin());

std::cout << data;
std::cout << &writable[0];
return &writable[0];
}

所以当使用类消息这一行时:

std::cout << "In session " << strlen(data) << " " << data;

我得到:

st String //this is cout from message getData
st String //this is cout from message getData
In session 0

内联版本:

In session 11 st String

因此,尽管消息 cout 显示相反的内容,但 session 函数字符串为空。我不知道它是否重要,但是这个函数作为新线程从 main 调用。

问候,彼得

最佳答案

您正在返回一个临时地址:

char* message::getData()
{
std::vector<char> writable(data.size() + 1);
//...
return &writable[0];
}

这是未定义的行为。

我假设 data 只是一个 std::string。你可以这样做:

const char* message::getData() const
{
return data.c_str();
}

关于c++ - 代码内联工作,但在类里面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com