声明不兼容.(指针)

declaration is incompatible with .. (pointer)

本文关键字:指针 不兼容 声明      更新时间:2023-10-16

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

}

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

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

然而,你在quasiUniqueQ之外可以做的事情是有限的,因为Node已经被声明为private,所以你不能声明quasiuniqueQ::NodequasiUniqueQ::Node*来分配给对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

不能使用返回具有较窄访问修饰符的类型的成员。在本例中,Node结构体对您的类来说是私有的,但是您尝试从公共成员返回一个指向Node对象的指针。因为它是私有的,Node类型不能在类的外部使用,所以不可能从公共成员返回任何类型为Node的东西。

您还需要完全指定结构的名称,因为类型包含在类中,但是您在类的之外定义方法:

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