声明与..(指针)不兼容

时间:2013-05-06 06:17:24

标签: c++ queue declaration

我的.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
{


}

2 个答案:

答案 0 :(得分:3)

首先,NodequasiUnuqieQ内声明,因此您需要

quasiUniqueQ::Node* quasiUniqueQ::dequeue() { ... }

但是,由于quasiUniqueQNode声明为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()
{

}