【问题标题】:Issue having access to private member in a class访问班级中的私人成员的问题
【发布时间】:2012-10-06 02:37:36
【问题描述】:

因此,在我的派生类 OrderedList 的头文件中,我通过告诉编译器使用 using List<DataType>::examplefunction; 的基类方法,继承了我之前创建的 List 类的一些功能。所有未被覆盖且以上述方式声明的函数都是 OrderedList 的私有成员。

所以当我运行我的程序时,我在 Microsoft Visual Studio 中得到以下错误:

错误 C2248:“OrderedList::examplefunction”:无法访问在“OrderedList”类中​​声明的私有成员

examplefunction 在基类 List 中是公共的。

这是我正在使用的具体示例:

在 OrderedList.h 中,

private: 
using List<DataType>::remove;

在 List.h 中,

public:
void remove () throw ( logic_error );

而移除在 List.cpp 中的位置,

void List<DataType>::remove () throw ( logic_error ) 
{ // Do some operations// 
}

我的 OrderedList 头文件中的声明也是这样的:

#include "List.cpp"

template < typename DataType, typename KeyType >
class OrderedList : public List<DataType>

如果有人能告诉我导致问题的原因,将不胜感激。

【问题讨论】:

  • 提供更多的代码,而不仅仅是使用 stmt。
  • 我添加了更多代码。希望这会对您有所帮助。你有什么具体的要求吗?
  • 您的部分代码仍然不足以理解您的问题。
  • 你还想让我发布什么?真的没有更多的参与。

标签: c++ visual-studio-2010 inheritance


【解决方案1】:

如果 exampleFunction 在您的 List 类中是私有的,您的 OrderedList 类将无法访问它。改为保护它。见Private and Protected Members : C++

【讨论】:

  • exampleFunction 在 List 类中是公共的。
  • 您是否从 exampleFunction 访问任何私有方法/成员?
  • 否,但它正在访问受保护的数据成员。
【解决方案2】:

在 OrderedList 头文件中将继承的方法移至 public 并将数据成员移至受保护的工作。

更新

所以这是大约一年前的事了。然而,现在看来,它是如此的明目张胆。给出的指令将base classList)的继承方法声明为private,但在教科书作者(用于测试目的)提供的main中,一些继承的方法被调用。在 private 中创建的 OrderedList 实例无法调用 main

我们的讲师后来更正了这些说明,但有时作为学生,您可以密切关注。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2015-07-23
    • 2016-10-26
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多