我想爲項目使用OGDF C++庫並希望使用該庫的類的受保護成員函數。我無法直接訪問類或派生類之外的受保護成員,因此要使用Balloon Layout類的受保護方法,我創建了一個從BallonLayout
繼承的類A
。從A
開始,超類的受保護功能在A
類的公共功能abc()
中調用;這樣我可以在班級以外使用abc()
,並且可以使用班級BallonLayout
的間接保護功能。在派生類中訪問受保護的成員函數 - 分段錯誤
下面是代碼,請告訴我它在哪裏存在問題。
#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);
,我也嘗試了以下,但我得到了同樣的錯誤。
A* a;
a->abc(G);
和
A *a = new A;
a->abc(G);
delete a;
和
A a;
a.abc(G);
敵人上面的嘗試中的每一個,得到了一個段故障。此方法在調用a.abc(G)
後調用超類的方法時出現此錯誤。
'A * A;'不指向任何東西,你應該改變那些'A * A =新的A;'或'A中; ';' – Raxvan