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中调用类的静态函数的主要内容,如果未能解决你的问题,请参考以下文章