2013-05-06 345 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