微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CURL 作为 C++ 类的私有成员

如何解决CURL 作为 C++ 类的私有成员

我的目标是构建一个 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。

解决方法

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

,

您的标题需要如下所示:

#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(如果您还没有)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。