如何在 C++ 中递归调用 class?
How to call a class recursively in c++?
你好,这是代码:
template <class T> class FibonacciHeap{
public:
class Entry{
public:
// Returns the element represented by this heap entry.
T getValue(){
return mElem;
}
// Sets the element associated with this heap entry.
void setValue(T value){
mElem = value;
}
// Returns the priority of this element.
double getPriority(){
return mPriority;
}
private:
int mDegree = 0; // Number of children
bool mIsMarked = false; // Whether the node is marked
Entry mNext; // Next element in the list
Entry mPrev; // Previous element in the list
Entry mChild; // Child node, if any
Entry mParent; // Parent node, if any
T mElem; // Element being stored here
double mPriority; // Its priority
//Constructs a new Entry that holds the given element with the indicated priority.
Entry(T elem, double priority){
mNext = mPrev = this;
mElem = elem;
mPriority = priority;
}
};
...
在Class "Entry"中我想递归调用Entry,所以我可以使用:
First_entry.mPrev.mNext
我知道这在 Java 中有效,但是当我用 C++ 编译它时,我得到:
error: 'FibonacciHeap<T>::Entry::mNext' has incomplete type
有谁知道如何解决这个问题或解决这个问题?
根据此处的变量名和初始值设定项,我假设您正在将我的 Java Fibonacci heap 改编成 C++。 :-) 如果是这样,祝你好运!
在 Java 中,如果你有一个 Entry
类型的变量,它就像一个 Entry*
类型的 C++ 变量,因为它是指向另一个 Entry
的指针对象而不是诚实到善良的 Entry
对象。因此,在 Entry
class 的定义中,您应该调整字段,使它们的类型为 Entry*
而不是 Entry
。同样,不要对 select 字段使用 .
运算符,而是要使用 ->
运算符。所以
First_entry.mPrev.mNext
将被重写为
First_entry->mPrev->mNext
不要忘记将 Entry
指针显式初始化为 nullptr
- Java 会自动执行此操作,这就是 Java 版本中没有初始化程序的原因.但是,C++ 会为未初始化的指针提供垃圾值,因此请确保为 mChild
和 mParent
提供明确的 nullptr
值。
你好,这是代码:
template <class T> class FibonacciHeap{
public:
class Entry{
public:
// Returns the element represented by this heap entry.
T getValue(){
return mElem;
}
// Sets the element associated with this heap entry.
void setValue(T value){
mElem = value;
}
// Returns the priority of this element.
double getPriority(){
return mPriority;
}
private:
int mDegree = 0; // Number of children
bool mIsMarked = false; // Whether the node is marked
Entry mNext; // Next element in the list
Entry mPrev; // Previous element in the list
Entry mChild; // Child node, if any
Entry mParent; // Parent node, if any
T mElem; // Element being stored here
double mPriority; // Its priority
//Constructs a new Entry that holds the given element with the indicated priority.
Entry(T elem, double priority){
mNext = mPrev = this;
mElem = elem;
mPriority = priority;
}
};
...
在Class "Entry"中我想递归调用Entry,所以我可以使用:
First_entry.mPrev.mNext
我知道这在 Java 中有效,但是当我用 C++ 编译它时,我得到:
error: 'FibonacciHeap<T>::Entry::mNext' has incomplete type
有谁知道如何解决这个问题或解决这个问题?
根据此处的变量名和初始值设定项,我假设您正在将我的 Java Fibonacci heap 改编成 C++。 :-) 如果是这样,祝你好运!
在 Java 中,如果你有一个 Entry
类型的变量,它就像一个 Entry*
类型的 C++ 变量,因为它是指向另一个 Entry
的指针对象而不是诚实到善良的 Entry
对象。因此,在 Entry
class 的定义中,您应该调整字段,使它们的类型为 Entry*
而不是 Entry
。同样,不要对 select 字段使用 .
运算符,而是要使用 ->
运算符。所以
First_entry.mPrev.mNext
将被重写为
First_entry->mPrev->mNext
不要忘记将 Entry
指针显式初始化为 nullptr
- Java 会自动执行此操作,这就是 Java 版本中没有初始化程序的原因.但是,C++ 会为未初始化的指针提供垃圾值,因此请确保为 mChild
和 mParent
提供明确的 nullptr
值。