C++在main中调用类的静态函数

Posted

技术标签:

【中文标题】C++在main中调用类的静态函数【英文标题】:C++ call static function of class in main 【发布时间】:2014-02-10 11:43:58 【问题描述】:

我有课

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(); 我使用了静态思维,这可能有助于在不创建对象的情况下调用我的函数,但我总是得到这些错误

错误 C2597:对非静态成员的非法引用 'Triedenie_cisla::bubble_cas'

错误 C3867:“Triedenie_cisla::bubble_cas”:缺少函数调用 参数列表;使用 '&Triedenie_cisla::bubble_cas' 创建一个指针 给会员

如何解决问题?非常感谢,我是 C++ 新手

【问题讨论】:

看起来这个类提供了排序功能,但也记录了这些排序的时间。如果我理解正确的话,这似乎是糟糕的设计。你不应该把排序和时间混为一堂。有一堂分类课。分别执行计时。 【参考方案1】:

由于zorad_Sorty 是静态的,它只能访问静态成员。但是您的实现访问非静态成员。

如果您需要访问此类的非静态成员,则必须实例化它的一个实例。

或者,如果您必须使用静态方法,则必须仅使用静态成员来实现该方法。

【讨论】:

【参考方案2】:

正如错误所说,您不能在静态函数中使用非静态成员。 您可以逐渐使您需要使用静态的所有内容,但因为在 main 中创建对象并使用它可能更有意义。 例如

(edit) 如果你有默认构造函数...

//...

Triedenie_cisla object;

object.zorad_Sorty();

否则提供它需要的参数:

Triedenie_cisla object(&poleHodnot, ddlzka);

object.zorad_Sorty();

【讨论】:

我试图这样做,但是当我尝试创建对象时,我得到了这种类型的错误。 'Triedenie_cisla':没有合适的默认构造函数可用知道如何处理吗?谢谢 @user3292179 编译器是对的。您没有提供默认构造函数。 但是我不知道如何提供默认构造函数,我不需要在我的程序中使用它,除了这里。 只有在有意义的情况下才提供默认构造函数。否则,请使用您提供的构造函数,即带有两个参数的构造函数。

以上是关于C++在main中调用类的静态函数的主要内容,如果未能解决你的问题,请参考以下文章

调用 UIViewController 类的非静态函数

C++ 静态成员变量成员函数

visual C++中error C2352是啥意思

visual C++中error C2352是啥意思

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???

C++ 类中的静态成员变量,静态成员函数