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ため、の外でできることは限られています。そのため、 orを宣言して への呼び出しの戻り値に代入することはできません。また、クラスの外で名前を付けることはできないため、強制的にクラス内でメンバー関数を定義します。NodeprivatequasiuniqueQ::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 に答える