繁体   English   中英

静态函数和访问类变量

[英]Static function and access to the class variable

我有一个包含静态函数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成为bool_Serveur_Fonctionne的静态成员。

2)将具有访问器的对象实例( MainWindowbool_Serveur_Fonctionne给您的静态方法bool_Serveur_Fonctionne

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的建议更新了代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM