静态函数和对类变量的访问
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
成为类的静态成员
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的建议更新了代码
- 访问类成员而不复制此变量或互斥变量
- 分段 访问私有类变量时出错
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 访问类对象以与全局变量进行比较
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 访问类成员的成员变量时 cpp 程序挂起
- 类变量无法从类方法访问
- 从静态成员函数访问私有非静态类变量 - C++
- 如何使用对象数组访问类中的变量?
- 无法使用子类变量访问超类公共成员
- 为什么我无法使用继承类访问私有变量?
- 为什么可以从类中的对象访问类的私有变量
- 创建函数来访问类变量是一种好的做法吗
- 从std::thread访问类变量
- 如何访问类变量?公共方法/getters与继承.优点和缺点是什么
- 在使用头文件/源文件时访问类变量的麻烦
- 如何从外部"C"函数访问类变量?
- 无法访问类变量
- 访问类变量时出现问题
- 友元函数无法访问类变量