2017-10-16 26 views
-3

私のような同じクラスの非静的メンバ関数から非静的メンバ関数を呼び出す必要があります:私の問題は、私は「セグメンテーションフォールトでのプログラムのクラッシュquickSort2Dを呼び出すときdameBST機能である静的メンバー関数から非静的メンバー関数を呼び出す方法

class bintree { 
private: 
    float root; 
    bintree *left; 
    bintree *right; 


public: 
    bintree() : left(nullptr), right(nullptr) { 
    } 

    bintree(const float &t) : root(t), left(nullptr), right(nullptr) { 
    } 

    ~bintree() { 
    if (left != nullptr) 
     delete left; 

    if (right != nullptr) 
     delete right; 
    } 

    static void niveles(bintree *); 

    static bintree *dameBST(float** array, int depth, int left = 0, int right = -1); 
    void quickSort2D(float** arr, int left, int right, int n); 

}; 

: 11 'メッセージ。

bintree * 
bintree::dameBST(float **array, int depth, int left, int right) 
{ 
    int n=0; 
    depth++; 
    bintree *t = new bintree; 
    bintree *tl; 
    bintree *tr; 

    if(depth%2 != 0) { n = 1; } 

    quickSort2D(array, left, right -1, n); 
    if (right == -1) {right = 10;} 
    if (left == right) { return nullptr; } 
    if(left == right - 1) { return new bintree(array[left][n]); } 



    int med = (left + right)/2; 

    t->root = array[med][n]; 
    tl = dameBST(array, depth, left, med); 
    tr = dameBST(array, depth, med + 1, right); 
    t->left = tl; 
    t->right = tr; 




return t; 

なぜか分かりません。

+1

はしないでください。 )、それを行う必要がある場合は、静的関数が最初にメンバ関数である必要があることを意味します。 – alfC

+0

まあ、私は古典的な答えは、パラメータとしてインスタンスを渡し、静的関数内からインスタンスメソッドを呼び出すことだと思います。 –

答えて

1

非スタティックメンバ関数は、クラスのインスタンスで呼び出される必要があるメソッドです。静的コンテキストでは、インスタンスは存在しません。クラスだけがあります。あなたがメソッドquickSort2D呼び出すことができbinkreeクラスのオブジェクトtている場合

t.quickSort2D(...) 

UPDATEを あなたは非静的関数からの静的メソッドを呼び出すことができますが、その逆はない

+0

実際には、メンバー参照型 'bintree *'がポインタであるために、t-> quickSort2D()ですが、それを変更した後も、私は 'segmentation fault:11'を返します。 –

+0

@SakinaLaanani確かに、それの名前...とにかく彼はdidnと思われる' tはtと呼ばれるinctanceでそのメソッドを呼び出すつもりです。そのため、エラーが発生します –

関連する問題