C++ 声明与..不兼容。。(指针)
此出列函数的.cpp文件出错,该函数应返回指向节点的指针 错误是:返回值的标识符节点未定义,并且上的声明不兼容 下队。我想知道我做错了什么。谢谢你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;
//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他们可以返回私有成员,但不能返回私有类型。这个类外部的代码如何使用另一个类私有的数据类型?这非常有用。谢谢你的帮助。这是彻底的和信息性的。非常有用。非常感谢。这是彻底的信息。非常有用。非常感谢你。