2013-05-06 350 views
0

我在我的.cpp文件中出现错误,该错误函数应该返回指向节点的指针 错误是:identifier节点未定义为返回值,声明为在 出列不兼容。我想知道我做错了什么。以前感谢。声明与...不兼容(指针)

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


} 

回答

3

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

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 
+0

这是彻底的和信息。很有帮助。非常感谢你。 – 2013-05-06 06:32:10

1

您不能让成员返回具有较窄访问修饰符的类型。在这种情况下,Node结构是专用到您的课程,但您尝试返回指向从公开成员的Node对象的指针。由于它是私密的,因此Node类型不能在班级以外使用,因此无法从公共成员返回任何类型为Node的内容。

您还需要完整指定该结构的名称,因为类型包含您的类中,但是你要定义的方法外类的

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

} 
+0

既然是同一类的,我想他们会访问。我现在没有任何错误,但我实际上认为公共职能只要来自同一个班级就可以访问和返回私人成员。谢谢。 – 2013-05-06 06:26:09

+0

@LeonardLie他们可以返回私人*成员*,但不是私人*类型*。这个类的外部代码如何使用另一个类的私有类型的数据? – cdhowie 2013-05-06 06:27:35

+0

这真的很有帮助。感谢您的帮助。 – 2013-05-06 06:31:47