【问题标题】:CURL as private member of C++ classCURL 作为 C++ 类的私有成员
【发布时间】:2021-08-29 11:59:36
【问题描述】:

我的目标是构建一个 C++ 类来抽象出几个 POST 方法。我想我想为整个类创建一个 CURL 对象的实例,所有方法都共享它。

这是我的测试设置,效果很好

头文件

#pragma once
#include <curl/curl.h>
class RPC
{
public:
    RPC();
};

cpp 文件

RPC::RPC()
{
    CURL* m_curl;
    m_curl = curl_easy_init();
    // curl_easy_setopt() and curl_easy_perform()
    curl_easy_cleanup(m_curl);
}

此代码构建并运行并产生预期的输出。问题是当我尝试使 m_curl 成为 RPC 类的私有成员时。 RPC 类将有多个方法调用curl_easy_perform(),我不想每次都调用curl_easy_init()curl_easy_cleanup。我想分别在构造函数和析构函数中调用一次。

这就是我想要的

头文件

#pragma once
#include <curl/curl.h>
class RPC
{
public:
    RPC();
    ~RPC();
    void someMethod();
private:
    CURL* m_curl;
};

cpp 文件

RPC::RPC()
{
    m_curl = curl_easy_init();
}
RPC::~RPC()
{
    curl_easy_cleanup(m_curl);
}
void RPC::someMethod()
{
    // curl_easy_setopt() and curl_easy_perform()
}

问题出在头文件中的这一行:

CURL* m_curl;

我收到以下 3 个构建错误:

error C2143: syntax error: missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'

我也尝试在初始化列表中调用 curl_easy_init(),如下所示:

RPC::RPC() : m_curl(curl_easy_init())

但这会产生相同的构建错误。

任何帮助表示赞赏! :)

编辑:我确实在标题中包含 curl。

【问题讨论】:

  • 你试过在头文件中#include 吗?
  • 糟糕,应该将其包含在示例代码中。我确实在头文件中包含 curl:#pragma once#include &lt;curl/curl.h&gt;
  • 你确定你正在编译你发布的同一个文件吗?确保文件没有在编辑器中修改并写入磁盘。
  • 是的,我确定我正在编译该代码。

标签: c++ curl libcurl


【解决方案1】:

在第一种情况下,您只能在 cpp 文件中包含 CURL,但对于第二种情况,您必须在头文件中包含 CURL。

【讨论】:

  • curl 包含在头文件中,我已经编辑了我的问题以表明
【解决方案2】:

您的标题需要如下所示:

#ifndef RPC_H
#define RPC_H

#include "curl/curl.h"

class RPC
{
public:
    RPC();
    ~RPC();
    void someMethod();
private:
    CURL* m_curl;
};

#endif

换句话说:

  • 您需要声明CURL
  • 您可以通过在标题中添加#include "curl/curl.h" 来执行此操作。
  • 您的标头还需要include guard,如果您还没有的话。

【讨论】:

  • curl 包含在头文件中,我已经编辑了我的问题以表明
  • 你也在使用“#pragma once”。酷 :) 问:你仍然得到相同的编译错误吗?问:哪条线路?根据您的帖子,我 ASSUME 所有三个错误都来自标题中的第 10 行:CURL* m_curl。但是“假设”是“坏的”。请确认行号,并显示相应的源代码。问:你是否有可能在某处有一些奇怪的“#define”,可能会“覆盖”“CURL”的默认定义?您向我们展示的第 10 行 应该 编译时出现错误:(
  • 你是对的,所有 3 个错误都来自以下行:CURL* m_curl; 代码完全如图所示,除了 // curl_easy_setopt() and curl_easy_perform() 设置了一些实际的 curl 选项,什么没有。我也希望编译得很好。到目前为止,我已经采用了 curlWrapper() 方法来处理 m_curl = curl_easy_init();curl_easy_cleanup(m_curl); 部分,但是每次我使用 curl 时都会执行。哦,好吧...
  • 问:你想打赌这个错误是由“private: CURL* m_curl”之前的行之一引起的吗?
猜你喜欢
  • 1970-01-01
  • 2018-06-10
  • 2019-12-29
  • 1970-01-01
  • 2018-02-23
  • 2017-03-21
  • 1970-01-01
  • 2013-05-23
  • 2011-07-30
相关资源
最近更新 更多