Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 声明与..不兼容。。(指针)_C++_Queue_Declaration - Fatal编程技术网

C++ 声明与..不兼容。。(指针)

C++ 声明与..不兼容。。(指针),c++,queue,declaration,C++,Queue,Declaration,此出列函数的.cpp文件出错,该函数应返回指向节点的指针 错误是:返回值的标识符节点未定义,并且上的声明不兼容 下队。我想知道我做错了什么。谢谢你 //quasiUniqueQ.h #ifndef QUASIUNIQUE_H #define QUASIUNIQUE_H class quasiUniqueQ { private: struct Node{ int value; int age; }; Node* array; int size;

此出列函数的.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
{


}

不能让成员返回具有更窄访问修饰符的类型。在这种情况下,
节点
结构是类的私有结构,但您试图从公共成员返回指向
节点
对象的指针。由于它是私有的,
节点
类型不能在类之外使用,因此无法从公共成员返回任何键入为
节点
的内容

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

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

}

不能让成员返回具有更窄访问修饰符的类型。在这种情况下,
节点
结构是类的私有结构,但您试图从公共成员返回指向
节点
对象的指针。由于它是私有的,
节点
类型不能在类之外使用,因此无法从公共成员返回任何键入为
节点
的内容

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

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

}

首先,
Node
quasiunqieq
中声明,因此您需要

quasiUniqueQ::Node* quasiUniqueQ::dequeue() { ... }
但是,在
quasiUniqueQ
之外,您可以对其执行的操作受到限制,因为
Node
已声明为
private
,因此您不能声明
quasiUniqueQ::Node
quasiUniqueQ::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
quasiunqieq
中声明,因此您需要

quasiUniqueQ::Node* quasiUniqueQ::dequeue() { ... }
但是,在
quasiUniqueQ
之外,您可以对其执行的操作受到限制,因为
Node
已声明为
private
,因此您不能声明
quasiUniqueQ::Node
quasiUniqueQ::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

因为它在同一个类中,所以我认为它们可以访问。我现在没有任何错误,但我实际上认为公共函数可以访问和返回私有成员,只要它们来自同一个类。谢谢。@leonardie他们可以返回私有成员,但不能返回私有类型。这个类外部的代码如何使用另一个类私有的数据类型?这非常有用。谢谢你的帮助。因为它是在同一个班级,我想他们可以访问。我现在没有任何错误,但我实际上认为公共函数可以访问和返回私有成员,只要它们来自同一个类。谢谢。@leonardie他们可以返回私有成员,但不能返回私有类型。这个类外部的代码如何使用另一个类私有的数据类型?这非常有用。谢谢你的帮助。这是彻底的和信息性的。非常有用。非常感谢。这是彻底的信息。非常有用。非常感谢你。