首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在派生类分段错误中访问受保护的成员函数

在派生类分段错误中访问受保护的成员函数
EN

Stack Overflow用户
提问于 2014-03-13 20:58:07
回答 1查看 656关注 0票数 1

我正在尝试为一个项目使用OGDF C++库,并且希望使用这个库的一个类的受保护的成员函数。我不能直接在类或派生类外部访问受保护的成员,所以为了使用气球布局类的受保护方法,我创建了一个继承自BallonLayout的类A。在A中,在类A的公共函数abc()中调用超类的受保护函数;这样我就可以在类外部使用abc(),并在类BallonLayout的间接受保护函数中使用。

这是代码,请告诉我哪里有问题。

代码语言:javascript
复制
#include <ogdf/basic/Graph.h>
#include <ogdf/basic/graph_generators.h>
#include <ogdf/misclayout/BalloonLayout.h>

using namespace ogdf;

class OGDF_EXPORT A : public BalloonLayout{
        public:
            void abc(const Graph &G){
            selectRoot(G); //Calling super class protected method.               
            }
};

int main()
{
    int n = 5, m = 7;
    Graph G;
    ogdf::planarBiconnectedGraph(G, n, m);

    A* a = new A;
    a->abc(G);
    cout << "Done!!";
return 0;

}

它编译时没有任何错误,但在运行时它给出了“分段错误(核心转储)”。当我们试图访问不在内存中的东西(对象/变量)时,就会出现这个错误。但我不明白我做错了什么。

为了代替A* a = new A; a->abc(G);,我也尝试了下面的方法,但是我得到了同样的错误。

代码语言:javascript
复制
A* a; 
a->abc(G);

代码语言:javascript
复制
A *a = new A;
a->abc(G);
delete a;

代码语言:javascript
复制
A a;
a.abc(G);

对于上面的每一次尝试,我都会得到一个分段错误。当此方法调用超类的方法时,在调用a.abc(G)之后会出现此错误。

EN

回答 1

Stack Overflow用户

发布于 2014-03-13 21:00:08

代码语言:javascript
复制
A* a;
a->abc(G);

这会在没有初始化指针的情况下创建一个指针;然后尝试取消对该无效指针的引用以调用函数。结果是分段错误或其他未定义的行为。

您几乎肯定想要创建一个对象:

代码语言:javascript
复制
A a;
a.abc(G);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22379375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档