静态函数和对类变量的访问

Static function and access to the class variable

本文关键字:访问 类变量 静态函数      更新时间:2023-10-16

我有一个包含静态函数lancerServeur()的类MainWindow(这个函数是静态的,因为我在线程中使用它),现在我想在这个函数中调用私有变量bool_Serveur_Fonctionne,下面是代码:

void MainWindow::lancerServeur(){
    serveur s;
    while(bool_Serveur_Fonctionne){
        s.receiveDataUDP();
    }
}

不幸的是,我不能,经过一些研究,似乎一个静态函数不能访问什么不是静态的,那么我该怎么做才能允许我的函数访问:bool_Serveur_Fonctionne ?如果我想在static functionnon-static function中改变这个变量,你能给我更多的信息吗?

错误:invalid use of member 'MainWindow::bool_Serveur_Fonctionne' in static member function bool bool_Serveur_Fonctionne;

谢谢你的帮助。

静态函数只能访问类的静态成员,它们不能访问 this指针。仔细想想,静态方法不附加到对象的任何实例,因此尝试访问非静态成员是没有意义的(您需要对象的实例来访问)。

你有三个选择:

1)使bool_Serveur_Fonctionne成为类的静态成员

2)传递一个带有bool_Serveur_Fonctionne访问器的对象(MainWindow)的实例给你的静态方法。

3)传递bool_Serveur_Fonctionne的引用作为静态方法的参数

注意:

考虑std::atomic<bool>作为bool_Serveur_Fonctionne的类型

这个函数是静态的,因为我在线程

中使用它

可以使用非静态成员函数启动线程:

std::thread(&MainWindow::lancerServeur, mainWindowInstance);

你可以把它作为参数传递给线程函数:

void MainWindow::lancerServeur(MainWindow& obj){
    serveur s;
    // IF bool_Serveur_Fonctionne is public otherwise use some function to 
    //return value of this
    while(obj.bool_Serveur_Fonctionne){
        s.receiveDataUDP();
    }
}
int main(int argc, char* argv[]){
    MainWindow m; 
    std::thread t(MainWindow::lancerServeur, std::ref(m));
    t.join();  
}
编辑:

按照@Casey的建议更新了代码