我在这个链表构建和获取成员函数以能够访问嵌套类变量时遇到了一些问题。 它们都在同一个范围内,所以?
class intLinkedList {
public:
class node {
int v;
node* next;
};
private:
node* root;
node* tail;
int pop;
public:
intLinkedList() {
root = NULL;
tail = NULL;
pop = 0;
}
~intLinkedList() {
// dump all nodes
clear();
}
int insert(int v) {
node* new = new node;
new->v = v;
new->next = root;
root = new;
pop++;
return(0);
}
这是类和嵌套类... 关于为什么我无法访问嵌套类中的变量的任何想法?
默认情况下,所有类成员都是私有的。类嵌套的事实不会改变这个规则:intLinkedList::node::v 是私有的。
两个简单的解决方案是:公开成员,
class node {
public:
int v;
node* next;
};
或者只是让你的节点成为struct
:
struct node {
int v;
node* next;
};
另外,你编译了这个代码吗?编译器将在变量new
上产生错误,因为这是一个关键字。
类node
嵌入在类intLinkedList
中并不意味着允许外部类访问其内部类的私有成员。这意味着在外部类之外,内部类不直接可见。
最快的解决方法是使外部类成为内部类的friend class
;如下所示:
#include <cstddef>
class intLinkedList {
public:
class node {
int v;
node* next;
friend class intLinkedList; // HERE CHANGE
};
private:
node* root;
node* tail;
int pop;
public:
intLinkedList() {
root = NULL;
tail = NULL;
pop = 0;
}
~intLinkedList() {
// dump all nodes
//--clear();
}
int insert(int v) {
node* newp = new node; // USED NEWP AS "NEW" IS A KEYWORD
newp->v = v;
newp->next = root;
root = newp;
pop++;
return(0);
}
};
您有 2 个简单的选项: 1:将外部类声明为嵌套类中的友元类。这使它能够访问嵌套类中的所有成员。
class intLinkedList {
public:
class node {
int v;
node* next;
friend class intLinkedList;
};
intLinkedList();
~intLinkedList();
int insert(int v);
private:
node* root;
node* tail;
int pop;
};
如果只有外部类直接使用嵌套类,则可以在外部类中创建私有结构。
class OuterClass { private: struct InnerClass { int var; //Everything here visible by default. }; };
要提高头文件中的可读性,请仅声明函数,请在 cpp 文件中定义它们(请参阅示例 1(。