类函数不解析嵌套-class 实例或函数
Cllass functions not resolving nested-class instances or functions
我正在为 Stack
class 编写 成员函数 。我有一个链表(LL
)嵌套-class作为Stack
class的成员。在 Stack
构造函数中,我实例化了一个调用 LL
构造函数的新链表。使用 LL
的成员函数,我生成了一个新节点并将其指向 1st 堆栈。这很好解决。
但是,当我编写 Stack
成员函数时,eclipse 不再解析在 Stack
构造函数中生成的 LL
实例,也不再解析我创建的 LL
成员函数我正在尝试打电话。
我试过在 private
和 public
成员名称之间切换嵌套的 class。我还尝试通过使封闭的 class 成为成员来将嵌套的 class (LL
) 与其 enclosing/parent class (Stack
) 连接起来嵌套的 class 就像之前的 question/response:
Nested Class member function can't access function of enclosing class. Why?
两者都没有效果
No problems here:
class Stack
{
private:
int height, top_element;
class LL
{
push_front(string* new_address)
{
// ... definition
}
//... more nested-class members
};
public:
Stack(); // constructor
void push(string); // enclosing class member
};
Stack
构造函数也可以:
Stack::Stack(int size)
{
height = size;
top_element = 0;
string stack[height];
LL stack_map;
stack_map.push_front(stack);
}
当我到达这里时遇到了我的问题:
void Stack::push(string data)
{
if (top_element == height - 1)
{
string stack[height];
stack_map.push_front(stack); // <- PROBLEM
}
}
希望我没有包含太多代码。第二块是证明构造函数实例化 LL
并调用 push_front()
没有问题,而下一个定义抱怨相同的函数并且无法识别实例化的 LL
, stack_map
stack_map
和 push_front
都带有红色下划线
Symbol 'stack_map' could not be resolved
和
Method 'push_front' could not be resolved
你的问题主要有两个!
您在 Stack
的构造函数中有一个 LL
class 的对象
class,在范围内是本地的,在成员中不可用
函数 push
!
你有
LL stack_map;
在class(即Stack::Stack(int size) {...}
)的构造函数范围内,不在classStack
的成员函数void Stack::push(string data)
内。
因此,当您这样做时
stack_map.push_front(stack);
在成员函数中(即Stack::push
),编译器不知道它,因此出错。
如果您想访问 LL
class 的相同对象(即
stack_map
)在Stack
class的其他成员函数中,需要作为class.
的成员变量保存
其次,数组的可变长度不是标准的一部分
C++。意思是,stack
的构造函数中的代码
string stack[height];
应该改变。更好的选择是 std::vector
of std::string
's.
意思,改成
#include <vector> // std::vector
class Stack
{
private:
int height, top_element;
class LL
{
public:
void push_front(const std::vector<std::string>& new_address) { /* code here */ }
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--->> vector of `std::string`
};
LL stack_map; // >>>> `stack_map` member of `Stack`
public:
Stack(int size)
: height{ size }
, top_element{ 0 }
{
std::vector<std::string> stack(height);
stack_map.push_front(stack); //>>>> push_back to the member `stack_map`
}
void push(const std::string& str)
{
if (top_element == height - 1)
{
std::vector<std::string> stack(height);
stack_map.push_front(stack); //>>>> push_back to the member `stack_map`
}
}
};
The second block is the demonstrate that the constructor instantiated the LL
and called push_front()
no problem while the very next definition complained about the same function and couldn't recognize the instantiated LL
, stack_map
.
您在构造函数中有一个名为 stack_map
的变量,但它只是一个函数局部变量。它不是 class 的成员。因此,它不存在于 push()
.
中
听起来您需要将其设为 class 的成员变量。
class Stack
{
private:
int height, top_element;
class LL
{
push_front(string * new_address)
{
... ; // definition
}
};
LL stack_map;
public:
Stack(); // constructor
void push(string); // enclosing class member
};
完成后,确保从构造函数中删除函数局部变量。
我正在为 Stack
class 编写 成员函数 。我有一个链表(LL
)嵌套-class作为Stack
class的成员。在 Stack
构造函数中,我实例化了一个调用 LL
构造函数的新链表。使用 LL
的成员函数,我生成了一个新节点并将其指向 1st 堆栈。这很好解决。
但是,当我编写 Stack
成员函数时,eclipse 不再解析在 Stack
构造函数中生成的 LL
实例,也不再解析我创建的 LL
成员函数我正在尝试打电话。
我试过在 private
和 public
成员名称之间切换嵌套的 class。我还尝试通过使封闭的 class 成为成员来将嵌套的 class (LL
) 与其 enclosing/parent class (Stack
) 连接起来嵌套的 class 就像之前的 question/response:
Nested Class member function can't access function of enclosing class. Why?
两者都没有效果
No problems here:
class Stack
{
private:
int height, top_element;
class LL
{
push_front(string* new_address)
{
// ... definition
}
//... more nested-class members
};
public:
Stack(); // constructor
void push(string); // enclosing class member
};
Stack
构造函数也可以:
Stack::Stack(int size)
{
height = size;
top_element = 0;
string stack[height];
LL stack_map;
stack_map.push_front(stack);
}
当我到达这里时遇到了我的问题:
void Stack::push(string data)
{
if (top_element == height - 1)
{
string stack[height];
stack_map.push_front(stack); // <- PROBLEM
}
}
希望我没有包含太多代码。第二块是证明构造函数实例化 LL
并调用 push_front()
没有问题,而下一个定义抱怨相同的函数并且无法识别实例化的 LL
, stack_map
stack_map
和 push_front
都带有红色下划线
Symbol 'stack_map' could not be resolved
和
Method 'push_front' could not be resolved
你的问题主要有两个!
您在
Stack
的构造函数中有一个LL
class 的对象 class,在范围内是本地的,在成员中不可用 函数push
!你有
LL stack_map;
在class(即
Stack::Stack(int size) {...}
)的构造函数范围内,不在classStack
的成员函数void Stack::push(string data)
内。因此,当您这样做时
stack_map.push_front(stack);
在成员函数中(即
Stack::push
),编译器不知道它,因此出错。如果您想访问
LL
class 的相同对象(即stack_map
)在Stack
class的其他成员函数中,需要作为class. 的成员变量保存
其次,数组的可变长度不是标准的一部分 C++。意思是,
的构造函数中的代码stack
string stack[height];
应该改变。更好的选择是
std::vector
ofstd::string
's.
意思,改成
#include <vector> // std::vector
class Stack
{
private:
int height, top_element;
class LL
{
public:
void push_front(const std::vector<std::string>& new_address) { /* code here */ }
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--->> vector of `std::string`
};
LL stack_map; // >>>> `stack_map` member of `Stack`
public:
Stack(int size)
: height{ size }
, top_element{ 0 }
{
std::vector<std::string> stack(height);
stack_map.push_front(stack); //>>>> push_back to the member `stack_map`
}
void push(const std::string& str)
{
if (top_element == height - 1)
{
std::vector<std::string> stack(height);
stack_map.push_front(stack); //>>>> push_back to the member `stack_map`
}
}
};
The second block is the demonstrate that the constructor instantiated the
LL
and calledpush_front()
no problem while the very next definition complained about the same function and couldn't recognize the instantiatedLL
,stack_map
.
您在构造函数中有一个名为 stack_map
的变量,但它只是一个函数局部变量。它不是 class 的成员。因此,它不存在于 push()
.
听起来您需要将其设为 class 的成员变量。
class Stack
{
private:
int height, top_element;
class LL
{
push_front(string * new_address)
{
... ; // definition
}
};
LL stack_map;
public:
Stack(); // constructor
void push(string); // enclosing class member
};
完成后,确保从构造函数中删除函数局部变量。