Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;rasterbar libtorrent API的编译器问题_C++ - Fatal编程技术网

C++ C++;rasterbar libtorrent API的编译器问题

C++ C++;rasterbar libtorrent API的编译器问题,c++,C++,我试图编译,但没有用 以下是导致问题的代码: using namespace libtorrent; const address addy; new ip_filter(); ip_filter.add_rule(addy, addy, ip_filter::blocked); s.set_ip_filter(&ip_filter); 我经常遇到的错误是: mytorrent.cpp:1338: error: expected unqualified-id before '.'

我试图编译,但没有用

以下是导致问题的代码:

using namespace libtorrent;

const address addy;

new ip_filter();

ip_filter.add_rule(addy, addy, ip_filter::blocked);

s.set_ip_filter(&ip_filter);
我经常遇到的错误是:

mytorrent.cpp:1338: error: expected unqualified-id before '.' token
mytorrent.cpp:1340: error: expected primary-expression before ')' token
以下是无效集\u ip\u过滤器()

最后,这里是ip_过滤器类:

template <class Addr>
struct ip_range
{
        Addr first;
        Addr last;
        int flags;
};

class ip_filter
{
public:
        enum access_flags { blocked = 1 };

        ip_filter();
        void add_rule(address first, address last, int flags);
        int access(address const& addr) const;

        typedef boost::tuple<std::vector<ip_range<address_v4> >
                , std::vector<ip_range<address_v6> > > filter_tuple_t;

        filter_tuple_t export_filter() const;
};
模板
结构ip_范围
{
地址优先;
地址最后;
国际旗帜;
};
类ip_过滤器
{
公众:
枚举访问标志{blocked=1};
ip_过滤器();
void add_规则(地址优先、地址最后、int标志);
int访问(地址常量和地址)常量;
typedef boost::元组过滤器;
filter\u tuple\u t export\u filter()常量;
};
任何提示都将不胜感激


谢谢大家!

您正在使用
new ip\u filter()
,这将在堆上创建
ip\u filter
类的新实例。但是您没有在任何地方分配
new
的结果。然后,您试图访问
ip_filter
的方法,就像它是一个对象一样,然后将其传递给其他人,就像它是一个对象一样
ip\u filter
是一个类,而不是一个对象,它只是告诉编译器如何创建
ip\u filter
类型的对象。要实际使用它,您需要首先创建
ip\u过滤器
类的实例。然后您可以从该实例访问它的方法和成员

ip_filter *my_filter = new ip_filter;
您不需要括号,因为您没有传递任何参数,这也会使编译器感到困惑,因为您似乎正在声明一个名为“ip_filter”的函数,返回类型“new”,不带任何参数。然后,您可以通过
my\u filter
指向的实例访问
ip\u filter
方法

my_filter->add_rule(addy, addy, ip_filter::blocked);
然后像前面一样操作,但不要使用
&
,因为它已经是一个指针了

s.set_ip_filter(ip_filter);

c
标记已删除:
使用
命名空间
新建
(参考??,
公共:
以及其他可能的构造在c中无效
s.set_ip_filter(ip_filter);