我有一个包含静态函数MainWindow
的类lancerServeur()
(此函数是静态的,因为我在一个线程中使用它),现在我想调用一个私有变量{{ 1}}在这个函数中,这里是代码:
bool_Serveur_Fonctionne
不幸的是,经过一些研究后,似乎静态函数无法访问非静态函数,所以如何才能允许我的函数访问:{{1} }?您是否可以提供有关此内容的更多信息,如果我想在void MainWindow::lancerServeur(){
serveur s;
while(bool_Serveur_Fonctionne){
s.receiveDataUDP();
}
}
和bool_Serveur_Fonctionne
更改此变量该怎么办?
以下是错误:static function
感谢您的帮助。
答案 0 :(得分:2)
静态函数只能访问类的静态成员,无法访问 this
指针。如果你考虑一下,静态方法没有附加到对象的任何实例,所以尝试访问非静态成员是没有意义的(你需要一个对象的实例来做到这一点)。
您有三种选择:
1)使bool_Serveur_Fonctionne
成为该类的静态成员。
2)将具有MainWindow
访问器的对象(bool_Serveur_Fonctionne
)的实例传递给静态方法。
3)传递bool_Serveur_Fonctionne
的引用作为静态方法的参数。
注意:强>
将std::atomic<bool>
视为bool_Serveur_Fonctionne
答案 1 :(得分:2)
这个函数是静态的,因为我在一个线程中使用它
您可以使用非静态成员函数启动一个线程:
std::thread(&MainWindow::lancerServeur, mainWindowInstance);
答案 2 :(得分:0)
你可以将它作为参数传递给线程函数:
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建议的代码。