c++ - 类前向声明​​ libtorrent

标签 c++ visual-studio libtorrent

我如何正确转发声明一个类?

//client_functions.cpp
using namespace libtorrent;
session Sess;

bool Start_Client_Sess( )
{
    Sess.add_extension ( create_ut_pex_plugin );
    Sess.add_extension ( create_ut_metadata_plugin );
    Sess.add_extension ( create_lt_trackers_plugin );
    Sess.add_extension ( create_smart_ban_plugin );
    Sess.start_upnp( );
    Sess.start_natpmp( );
    Sess.start_dht( );
    Sess.start_lsd( );
    error_code e;
    Sess.listen_on ( std::make_pair ( 6881 , 6889 ) , e );

    if ( e )
    {
        #ifdef DEBUG_CONSOLE
        std::cout << "Start Client failed\n";
        #endif
        return false;
    }

    return true;
}

我遇到的问题是代码是如何只有一个 Sess 的,这就是它需要的方式,就好像 session Sess; 在每个客户端函数中声明一样新 session 已创建,但现在 session Sess; 在函数外部声明,然后应用程序无法正确关闭,因为 Sess 有自己的线程并从对应用程序的第二次调用导致第二个实例挂起。

我想我需要 session Sess;_tWinMain 中,但是把它放在那里让我在 client_functions.cpp 上出错,它提示说Sess 未定义。

最佳答案

听起来您希望多个翻译单元共享一个全局 session 实例。你可以做的是,在一个翻译单元/cpp 文件中定义 Sess,像这样(假设这是你的 main.cpp):

libtorrent::session Sess;

在它的头文件(main.hpp)中,包括:

extern libtorrent::session Sess;

在任何其他想要使用 session 的翻译单元/cpp文件中,确保包含头文件(main.hpp),然后你可以使用main.cpp创建的实例

关于c++ - 类前向声明​​ libtorrent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28914946/

相关文章:

android - 为 Android 生成共享库

python - Libtorrent - 将整个数据保存在缓存中并稍后刷新

c++ - 使用 libtorrent 确定 torrent 下载序列的优先级

python-3.x - 如何在与 libtorrent/Python 的 session 中设置事件下载

c++ - 类析构函数段错误

visual-studio - 在 Visual Studio 2005 中打开 Visual Studio 2008 项目

c# - 使用 Visual Studio 2010 将解决方案文件添加到 asp.net 1.1 应用程序

c++ - 从成对 vector 中获取唯一元素的有效方法

c++ - "pure"IDispatch 接口(interface)是否需要代理/ stub DLL?

c++ - GDI+:如何用红色像素替换黑色像素?