gpt4 book ai didi

c++ - 如何将句柄添加为类成员,其中类用于堆模板?

转载 作者:行者123 更新时间:2023-11-28 06:50:03 24 4
gpt4 key购买 nike

考虑这个简单的例子:

#include <boost/heap/fibonacci_heap.hpp>

class MyClass;

struct compare_distances
{
bool operator()(const MyClass* n1, const MyClass* n2) const
{
return n1->distance > n2->distance;
}
};

typedef boost::heap::fibonacci_heap<MyClass*, boost::heap::compare<compare_distances> > fib_heap;

class MyClass
{
public:
string name;
double distance;
fib_heap::handle_type handle;
};

我想以这种方式访问​​堆中 MyClass 对象的句柄。所以我转发声明 MyClass。但是编译器说:错误:不完整类型“const class MyClass”的使用无效(compare_distances 中的return 行错误)。如何解决?

有必要实现一个方便的对象网络,例如:

class MyClass
{
public:
string name;
double distance;
fib_heap::handle_type handle[4]; // handles for other objects of MyClass
};

最佳答案

如果您只是在 MyClass 之前声明比较器仿函数的 operator() 并在类定义之后定义它,则可以编译,如下所示:

class MyClass;

struct compare_distances
{
inline bool operator()(const MyClass* n1, const MyClass* n2) const;
};

typedef boost::heap::fibonacci_heap<MyClass*, boost::heap::compare<compare_distances> > fib_heap;

class MyClass
{
public:
string name;
double distance;
fib_heap::handle_type handle;
};

bool compare_distances::operator()(const MyClass* n1, const MyClass* n2) const
{
return n1->distance > n2->distance;
}

请注意,我已将内联添加到函数中以避免链接器错误。 (在结构中定义的成员函数是隐式内联的。)

关于c++ - 如何将句柄添加为类成员,其中类用于堆模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com