我有一个类A,在这个类A的实现文件,也就是A.cpp文件中声明了几个全局变量(不在任何函数内声明的应该是全局变量吧)
现在也就是在这个A.cpp文件中创建了一个线程,线程中需要访问这几个全局变量。createthread的时候传的是this指针,
然后在线程函数里转成A类的指针A_Ptr使用。同时,在A类中有一个B类的私有的指针变量B_Ptr。访问全局变量的时候是这样的:
A_Ptr->B_Ptr->一个B类的接口函数(在参数中访问了那几个全局变量);
但是编译的时候VC报错,错误为B_Ptr不能访问A类中声明的私有变量,但是我觉得我没有用到私有变量啊,难道那几个全局变量变成私有变量了?各位大虾帮帮忙,给小弟一个解决办法吧。
现在也就是在这个A.cpp文件中创建了一个线程,线程中需要访问这几个全局变量。createthread的时候传的是this指针,
然后在线程函数里转成A类的指针A_Ptr使用。同时,在A类中有一个B类的私有的指针变量B_Ptr。访问全局变量的时候是这样的:
A_Ptr->B_Ptr->一个B类的接口函数(在参数中访问了那几个全局变量);
但是编译的时候VC报错,错误为B_Ptr不能访问A类中声明的私有变量,但是我觉得我没有用到私有变量啊,难道那几个全局变量变成私有变量了?各位大虾帮帮忙,给小弟一个解决办法吧。
而且我在声明的时候加了extern还是不对,错误还是一样的,还是不能访问私有变量,我的这种情况不属于私有变量吧
public:
void test(){
}
};
class A{
private:
B* pB;
public:
A(){
pB = new B();
CreateThread(threadTest,this);
}
public:
static DWORD threadTest(void* p){
A* pThis = (A*)p;
pThis->pB->test();
}
};
对于pThis而言,pB就是私有的,当然编译是通过不了的,把pB改成public就好了
函数去调用它,或者就把A类中的B对象变为公有成员。
是我自己搞错了,问题已经更新为我在4楼的回复
而且那个私有的友元类的指针变量不能改为public
O(∩_∩)O谢谢
要不用boost::thread将线程方法改写为类成员函数,而不是静态函数
private:
B* pB;
public:
B* get_PB(){return pB;}
}boost::threadclass B{
public:
void test(){
}
};
class A{
private:
boost::shared_ptr<B> b_;
public:
A(){
b_.reset(new B);
boost::thread thd(&A::threadTest);
}
private:
void threadTest(){
b_->test();
}
};