![](/img/trans.png)
[英]How to access static class variable in static member function of same class?
[英]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 function
和non-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)将具有访问器的对象实例( MainWindow
) bool_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.