c++ 当使用HTTP响应委托调用的类成员变量成员函数时,“错误:使用未声明的标识符”

06odsfpq  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(147)

我将令牌的值保存在类变量_Token中。令牌将添加到CreateHttpPostRequest中的请求标头
我使用CreateHttpPostRequestPostToJira中进行HTTP请求调用,并将响应绑定到OnResponseReceived
一旦我得到响应,我调用AddScreenshot,在那里我再次使用CreateHttpPostRequest发出请求,并将屏幕截图添加到问题中。(您只能将屏幕截图添加到现有问题,这就是为什么我们必须首先创建它,然后在后续调用中添加屏幕截图。
问题是当调用AddScreenshot时,_Token的值为空,我不知道为什么。
调试时,监视值显示如下:c++ Stopped in a C++ method, but 'this' isn't available; pretending we are in a generic context. error: use of undeclared identifier '_Token'
我尝试使用BindLambda代替,认为可能是Raw导致了这个问题,但看起来好像是绑定函数的一些东西清空了那个成员变量。即使我在头文件中定义了_Token的值,而不是使用AuthMan::GetToken(_Token)。值仍为空。
我也试过this->_Token,结果也是一样。
下面是我的头文件和cpp文件,经过清理,只显示问题和上下文:
HtttpUtil.h

  1. class HttpUtil
  2. {
  3. public:
  4. bool PostToJira();
  5. private:
  6. void AddScreenshot() const;
  7. void OnResponseReceived(FHttpRequestPtr request, FHttpResponsePtr response, bool bConnectedSuccessfully) const;
  8. TSharedRef<IHttpRequest, ESPMode::ThreadSafe> CreateHttpPostRequest() const;
  9. FString _Token = "my_token";
  10. };

HttpUtil.cpp

  1. bool HttpUtil::PostToJira()
  2. {
  3. const FHttpRequestRef request = CreateHttpPostRequest();
  4. request->OnProcessRequestComplete().BindRaw(this, &HttpUtil::OnResponseReceived);
  5. request->ProcessRequest();
  6. return true;
  7. }
  8. void HttpUtil::AddScreenshot() const
  9. {
  10. const FHttpRequestRef request = CreateHttpPostRequest();
  11. request->ProcessRequest();
  12. }
  13. void HttpUtil::OnResponseReceived(FHttpRequestPtr request, FHttpResponsePtr response, bool bConnectedSuccessfully) const
  14. {
  15. AddScreenshot();
  16. }
  17. TSharedRef<IHttpRequest, ESPMode::ThreadSafe> HttpUtil::CreateHttpPostRequest() const
  18. {
  19. TSharedRef<IHttpRequest, ESPMode::ThreadSafe> request = FHttpModule::Get().CreateRequest();
  20. request->SetURL("http://echo.jsontest.com/key/value/one/two");
  21. // When this function is called by AddScreenshot(), the _Token value is empty
  22. UE_LOG(LogConsoleResponse, Warning, TEXT("_Token = %s"), *_Token);
  23. return request;
  24. }
v09wglhw

v09wglhw1#

我遇到的问题是在回调发生之前类就被析构了。我的解决方案是不使用成员变量。

相关问题