C++ 如何从另一个文件继承私有成员变量和公共函数?
我试图从Stack.cpp文件中的container.cpp调用函数insertBack(newVal),但编译器抛出错误:标识符“insertBack”未定义。另外,尝试对同一文件中但位于专用区域下的变量n执行相同的操作——错误是相同的:标识符“n”未定义 这是我第一次进行多文件编译和继承 Stack.cppC++ 如何从另一个文件继承私有成员变量和公共函数?,c++,file,inheritance,compilation,C++,File,Inheritance,Compilation,我试图从Stack.cpp文件中的container.cpp调用函数insertBack(newVal),但编译器抛出错误:标识符“insertBack”未定义。另外,尝试对同一文件中但位于专用区域下的变量n执行相同的操作——错误是相同的:标识符“n”未定义 这是我第一次进行多文件编译和继承 Stack.cpp #包括“pch.h” #包括“Stack.h” #包括“container.h” Stack::Stack() { 容器(); } bool Stack::push(int newVal
#包括“pch.h”
#包括“Stack.h”
#包括“container.h”
Stack::Stack()
{
容器();
}
bool Stack::push(int newVal)
{
返回insertBack(newVal);
}
void Stack::pop()
{
--n;
}
容器.h
\ifndef集装箱
#定义容器
#布拉格语一次
#包括
类容器
{
公众:
容器();
//后置条件:数据成员n初始化为-1,空arr数组中的所有元素初始化为零
bool-insertBack(int-val);
//前提条件:容器对象未满
//后置条件:如果arr数组未满,则n将递增1;返回true,并在arr数组末尾插入val
//否则,返回false;不插入该值,程序继续执行。
私人:
static const int CAPACITY=10;//arr数组的物理大小或容器对象的存储容量
int-arr[CAPACITY];//arr数组最多可以存储容量为10的整数
int n;//n用作arr数组的下标。对于空数组,n被初始化为-1
//每次在arr数组中插入一个新值时,n必须首先递增
//由于n已初始化为-1,第一个插入值存储在arr[0]中,
//第二个插入值将在arr[1]中,以此类推,第n个插入值将为
//存储在arr[n–1]中。显然,n+1表示元素的实际数量
//插入n轮后存储在数组中。
};
#恩迪夫
Stack.h
#ifndef堆栈
#定义堆栈
#布拉格语一次
#包括
类堆栈
{
公众:
堆栈();
//后置条件:创建一个空堆栈对象(与P1中一样,n初始化为-1)
bool-push(int-newVal);
//后置条件:如果堆栈已满,则返回false。否则,返回true;同时newVal被推送到堆栈上
//堆栈大小增加1
void pop();
//前提条件:堆栈不能为空,否则将不会调用此函数
//后置条件:堆栈顶部的对象(一个整数值)在逻辑上弹出或删除,3)堆栈大小递减1
};
#恩迪夫
根据堆栈
构造函数的内容,我得出结论,您希望堆栈
继承自容器
Stack.h
已经包括container.h
,因此container
类在Stack
可见的任何地方都可见
您需要做的是声明实际的继承:
class Stack : container
您将得到一些编译器错误(一方面,容器构造函数是私有的),但这是另一天的故事。从
堆栈
构造函数的内容中,我得出结论,您希望堆栈
从容器
继承Stack.h
已经包括container.h
,因此container
类在Stack
可见的任何地方都可见
您需要做的是声明实际的继承:
class Stack : container
您将遇到一些编译器错误(一方面,容器构造函数是私有的),但这是另一天的故事。特别是,请以文本形式提供代码(而不是图像链接),因为图像链接将来可能会断开。为了提供一个简单的示例,我建议向我们展示
Stack.cpp
的相关内容以及Stack.h
和container.h
的相关部分。请使用代码文本而不是图片编辑您的帖子。我试图将图像粘贴到我的IDE中,但我的IDE不喜欢图片。现在请用Stack.h
编辑它。我们需要了解Stack
与Container
的关系。感谢您将图片转换为文本,但请添加一个,以确保我们了解了解问题所需的所有详细信息。在哪里定义了insertBack
?没有。特别是,请以文本形式提供代码(而不是图像链接),因为图像链接将来可能会中断。为了提供一个简单的示例,我建议向我们展示Stack.cpp
的相关内容以及Stack.h
和container.h
的相关部分。请使用代码文本而不是图片编辑您的帖子。我试图将图像粘贴到我的IDE中,但我的IDE不喜欢图片。现在请用Stack.h
编辑它。我们需要了解Stack
与Container
的关系。感谢您将图片转换为文本,但请添加一个,以确保我们了解了解问题所需的所有详细信息。在哪里定义了insertBack
?没有。我犯了一个大错误;当我减少这个问题的代码量时,我消除了公众的误解。在提出这个问题之前,我确实尝试过:class-Stack:public-container
:我仍然得到了这两个未定义的错误,所以我恢复了我的更改。我现在根据你的建议做出了改变:错误仍然存在。@S.咳嗽是你唯一的错误