Cllass 函数不解析嵌套类实例或函数
Cllass functions not resolving nested-class instances or functions
我正在为Stack
类编写成员函数s。我有一个链表(LL
)嵌套类作为Stack
类的成员。在Stack
构造函数中,我实例化一个新的链表,该链表调用LL
构造函数。使用LL
的成员函数,我生成一个新节点并将其指向 1st堆栈。这解决得很好。
但是,当我编写Stack
成员函数时,eclipse 不再解析在Stack
构造函数中生成的LL
实例,也不再解析我尝试调用的LL
成员函数。
我尝试在private
和public
成员指定之间切换嵌套类。我还尝试将嵌套类(LL
)与其封闭/父类(Stack
)连接起来,方法是使封闭类成为嵌套类的成员,如上一个问题/响应所示:
嵌套类成员函数无法访问封闭类的功能。为什么?
两者都没有效果
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
类的对象 类,它是作用域的本地类,在成员中不可用 功能push
!你有
LL stack_map;
在类的构造函数范围内(即
Stack::Stack(int size) {...}
) 不在类Stack
的成员函数void Stack::push(string data)
中。因此,当您这样做时
stack_map.push_front(stack);
在成员函数中(即
Stack::push
),编译器不知道,因此错误。如果要访问
LL
类的同一对象(即stack_map
) 在Stack
类的其他成员函数中,需要将其保留为类的成员变量。 -
其次,数组的可变长度不是标准的一部分 C++。意思是,构造函数中的代码
stack
string stack[height];
应该改变。更好的选择是
std::vector
std::string
的。
含义,更改为
#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`
}
}
};
第二个块是证明构造函数实例化
LL
并调用push_front()
没有问题,而下一个定义抱怨相同的函数并且无法识别实例化的LL
,stack_map
。
结构器中有一个名为stack_map
的变量,但它只是一个函数局部变量。它不是类的成员。正因为如此,它push()
中不存在。
听起来你需要把它作为类的成员变量。
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
};
执行此操作后,请确保从构造函数中删除函数局部变量。
- 如何在c++中为模板函数实例创建快捷方式
- 如何使用非默认构造函数实例化模板化类
- C++ - 使用另一个类的构造函数实例化一个对象
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 与参数匹配的友元模板函数实例化
- c++如何获取模板函数实例的地址
- 在保证复制的世界中构造函数实例化
- SFINAE 和模板函数实例化:为什么在启用了 SFINAE 类型的函数参数中使用模板参数时无法推断模板参数?
- 防止复制构造函数实例化 C++11 类"deleting"
- 如何键入定义一个专门的 std::set 模板,使用特定的比较函数实例化
- 没有 std::string .erase() 的重载函数实例
- C 矢量构造函数实例冲突
- 确保只有一个函数实例在运行?
- 使用不同类型的模板函数实例化
- C 调用模板构造函数实例化
- 没有与参数列表错误匹配的重载函数" "实例
- 为什么很清楚模板函数实例化不会内联
- 没有unordered_map的模板函数实例
- 模板函数实例化文件
- 模板函数实例化的可移植性问题