0

我的 .cpp 文件出现错误,该函数应该返回指向节点的指针错误是:标识符节点未定义返回值,并且声明在出队时不兼容。我想知道我做错了什么。之前谢谢。

//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
{


}
4

2 回答 2

3

首先,Node在里面声明quasiUnuqieQ,所以你需要

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

但是,您可以在外面做什么是有限的quasiUniqueQ,因为Node已被声明为private,所以您不能声明 aquasiuniqueQ::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
于 2013-05-06T06:20:52.627 回答
1

您不能拥有返回具有更窄访问修饰符的类型的成员。在这种情况下,该Node结构对您的类是私有的,但您尝试从公共成员返回指向Node对象的指针。因为它是私有的,所以该类型不能在您的类之外使用,因此不可能返回任何从公共成员中键入的内容。NodeNode

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

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

}
于 2013-05-06T06:20:17.113 回答