gpt4 book ai didi

C++ 数据成员在单独的成员函数中定义后返回垃圾

转载 作者:行者123 更新时间:2023-11-28 02:47:00 24 4
gpt4 key购买 nike

我不知道下面有多少代码与问题相关,但我有一个包含三个数据成员的派生类(locremote_host远程端口)。它们在类的头文件中声明,并在 Initialize() 成员函数中定义。但是,当 HandleRequest() 函数尝试访问它们时,remote_hostremote_port 分别返回垃圾和 0; loc 按预期返回 "/proxy"。有人可以指出显而易见的吗?我迷路了...

// in response_handler.hh
class ResponseHandlerInterface {
public:
virtual bool Initialize(const NginxConfig& config) = 0;
virtual bool HandleRequest(const std::string& request, std::string* response) = 0;
};


// in ProxyHandler.hh
class ProxyHandler : public ResponseHandlerInterface {
public:
std::string loc, remote_host;
int remote_port;
bool Initialize(const NginxConfig&);
bool HandleRequest(const std::string&, std::string*);
};


// in ProxyHandler.cc
bool ProxyHandler::Initialize(const NginxConfig &config) {
loc = "/proxy";
remote_host = "digboston.com";
remote_port = 80;
std::cout << "Values in Initialize():" << std::endl;
std::cout << loc << " " << remote_host << " " << remote_port << std::endl;
return true;
}

bool ProxyHandler::HandleRequest(const std::string &request, std::string *response) {
std::cout << "Values in HandleResponse():" << std::endl;
std::cout << loc << " " << remote_host << " " << remote_port << std::endl;
return true;
}


// in main.cc
// a new instance of ProxyHandler is created,
// Initialize() is called on the object,
// HandleRequest() is called on the object.

这是输出:(

>> ./runprogram

Values in Initialize():
/proxy digboston.com 80

Values in HandleResponse():
/proxy H?/P??P?? P??@ P??` P?? 0

如您所见,loc 保留了它的值。 remote_hostremote_port 保留它们初始化时的垃圾值。我该怎么做才能确保从 Initialize() 函数中永久更改所有三个值??

最佳答案

错误在您遗漏的部分。您所拥有的没有任何问题,实际上,如果我执行您在评论中所说的内容,那么我会得到预期的输出:

Values in Initialize():
/proxy digboston.com 80
Values in HandleResponse():
/proxy digboston.com 80

我的补充如下:

#include <iostream>

struct NginxConfig {};

// YOUR CODE GOES HERE

int main() {
ProxyHandler ph;
ph.Initialize(NginxConfig());
ph.HandleRequest(std::string(""), NULL);
return 0;
}

关于C++ 数据成员在单独的成员函数中定义后返回垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24071329/

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