2014-02-10 29 views
0

類的靜態函數我有一個類C++調用主

class Triedenie_cisla{ 
    public: 
     Triedenie_cisla(int *poleHodnot, int ddlzka); 
     int *pole, dlzka; 
     double bubble_cas, selection_cas, insertion_cas, quick_cas; 
     vector<int> mnozina_int;     
     string vypis_pola();   
     void BubbleSort_int();  
     void SelectionSort_int(); 
     void InsertSort_int(); 
     void QuickSort_int(); 
     void static zorad_Sorty(); 
}; 

而且功能

void Triedenie_cisla::zorad_Sorty(){ 
    if ((quick_cas<bubble_cas) && (quick_cas<selection_cas) && (quick_cas<insertion_cas)) { 
     cout << "The best one is Quick Sort with time "<< quick_cas << " ms"<< endl; 
    } 
} 

在我main.cpp中我需要調用這個函數。 Triedenie_cisla :: zorad_Sorty(); 我使用的靜態thkinking,可以幫助給我打電話功能,而無需創建對象,但我總是得到這些錯誤

錯誤C2597:非法引用非靜態成員 「Triedenie_cisla :: bubble_cas」

錯誤C3867:'Triedenie_cisla :: bubble_cas':函數調用失蹤 參數列表;使用「& Triedenie_cisla :: bubble_cas」創建一個指針 爲成員

如何解決這個問題?非常感謝,我在C++上很新穎

+1

它看起來像類提供了排序功能,同時也記錄這些時間。這似乎是糟糕的設計,如果我理解正確。你不應該把排序和時間混在一起。有一個課程進行分類。分別執行時間。 –

回答

3

由於zorad_Sorty是靜態的,它只能訪問靜態成員。但是你的實現訪問非靜態成員。

如果您需要訪問此類的非靜態成員,您將不得不實例化它的一個實例。

或者,如果您必須使用靜態方法,則必須僅使用靜態成員實現該方法。

+1

是的,輪到你了。 – jrok

0

由於錯誤提示您不能在靜態函數中使用非靜態成員。 您可以逐漸製作所有需要使用靜態的東西,但因爲在main中創建對象並使用它可能更有意義。 例如

編輯)如果你有一個默認的構造函數...

//... 

Triedenie_cisla object; 

object.zorad_Sorty(); 

否則提供它所需要的參數:

Triedenie_cisla object(&poleHodnot, ddlzka); 

object.zorad_Sorty(); 
+0

當我試圖創建對象時,我試圖做到這一點,因爲我得到這種類型的錯誤。 'Triedenie_cisla':沒有適當的默認構造函數可用 任何想法如何處理這個?謝謝 – user3292179

+0

@ user3292179編譯器是正確的。你沒有提供默認的構造函數。 –

+0

但我不知道如何提供deafualt構造函數,我不需要在我的程序中使用它,除了這裏。 – user3292179