C++ 请问一个类中包含类(在pulic中 Iterator),就是private 和 public 谁在前有影响么? 具体的代码如下。

#include<iostream>
using namespace std;

template<class T>
class Linked
{
public:
Linked() {
head = NULL ;
lenght = 0;
}

void pushFront(const T& newItem) {
Node* temp = new Node;
temp->item = newItem;
temp->next = head;

head = temp;

lenght++;
}//pushFront

long size() const {
return lenght;
}//size

class Iterator
{
friend class Linked;
private:
Node* nodePtr;
public:
Iterator(){}
Iterator(Node* newPtr) {
nodePtr = newPtr;
}
};
private:
struct Node{
T item;
Node *next;
};

Node *head;
long lenght;
};

int main(int argc, char *argv[])
{
Linked<int> myLinked;
myLinked.pushFront(1);

cout<<myLinked.size()<<endl;
return 0;
}

上面这个程序是不可以编译的。。
但是如果把Linked 中的private 和 public 调换下位置又可以,请教大家这是个什么问题??

第1个回答  2011-11-08
因为你在public里面你已经在使用Node这个结构体了,但是你这个结构体的定义又是在private里面,所以你把public放上面当然会错啦,还没定义怎么能用呢,最好的办法是把结构体的定义放到类的外面去放在最上面。
第2个回答  2011-11-08
这个是这个问题
Node* temp = new Node;

但是,你的struct node
struct Node{
T item;
Node *next;
};

却在后面,造成不识别追问

那为什么那个lenght可以在前面用的?在pushFront();里面lenght++;

追答

这里是类型的定义,不是数据成员的定义。
走到Node* temp = new Node;
的时候,如果你不看后面的代码,你知道node这个类型是一个struct还是一个class,有几个成员吗??

追问

那为什么像普通数据类型那些,比如我在后面才写int lenght , 但是在前面的pushFront();里面lenght++;我就用了,他怎么知道lenght是什么?我有点纠结,呵呵

本回答被提问者采纳
相似回答
大家正在搜