我的.cpp文件中出现了这个dequeue函数的错误,该函数应返回指向节点的指针 错误是:标识符节点未定义返回值且声明不兼容 出队。我想知道我做错了什么。谢谢。
//quasiUniqueQ.h
#ifndef QUASIUNIQUE_H
#define QUASIUNIQUE_H
class quasiUniqueQ
{
private:
struct Node{
int value;
int age;
};
Node* array;
int size;
int top;
void resize();
void copy(); // wrong return value;
void aging();
public:
void operator=(const quasiUniqueQ& rhs);
quasiUniqueQ(int num = 50);
~quasiUniqueQ();
void enqueue(int newNum);
Node* dequeue();
bool isEmpty();
bool isFull();
};
#endif
//quasiUniqueQ.cpp
#include "quasiUniqueQ.h"
using namespace std;
Node* quasiUniqueQ::dequeue() //ERROR HERE
{
}
答案 0 :(得分:3)
首先,Node
在quasiUnuqieQ
内声明,因此您需要
quasiUniqueQ::Node* quasiUniqueQ::dequeue() { ... }
但是,由于quasiUniqueQ
被Node
声明为private
,因此您在quasiuniqueQ::Node
之外可以执行的操作受到限制,因此您无法声明quasiUniqueQ::Node*
或{ {1}}分配给quasiUniqueQ::dequeue()
的调用返回,并且因为你不能在类之外命名quasuUniqueQ::Node
,你将被迫在类中定义成员函数:
struct quasiUniqueQ
{
...
Node* dequeue() { return .... ; }
};
然后,您原则上可以调用该方法,但有一些限制:
quasiUnuqueQ q;
q.dequeue(); // Compiles, but is useless
quasiUniqueQ::Node* n = q.dequeue(); // Error, quasiUnuqueQ::Node is private.
auto n = q.dequeue(); // OK
答案 1 :(得分:1)
您不能拥有返回具有较窄访问修饰符的类型的成员。在这种情况下,Node
结构是私有到您的类,但您尝试从 public 成员返回指向Node
对象的指针。由于它是私有的,Node
类型不能在您的类之外使用,因此无法从公共成员返回任何类型为Node
的内容。
您还需要完全指定结构的名称,因为类型包含在您的类中,但您要定义类的外部方法:
quasiUniqueQ::Node* quasiUniqueQ::dequeue()
{
}