我有一个lasse1的实例,我想在lasse2的方法中使用它,这个方法是静态方法,这只是不起作用:
class Lasse2{
......
public :
static void function(void);
Lasse1* obj;
........
};
现在我想使用它:
void Lasse2::function(void){
obj->dosmt(); // this doesn't work
.........
任何想法我该如何解决这个问题?
答案 0 :(得分:2)
如果要访问班级的实例成员,则必须拥有该班级的实例。没有办法解决这个问题。您的选择是:
如果你不能做其中任何一个,那么你需要找到一种方法将实例指针传递给你的函数。例如,需要函数指针的API通常具有一种机制,用于在最终调用时将指针大小的数据传递给该函数。
答案 1 :(得分:1)
更改静态方法以显式传递对象指针:
static void function(Lasse1* obj)
{
obj->dosmt();
}
但在你做之前,请考虑一下你真正想做的事情(如果你愿意,甚至可以写下另一个问题)。
答案 2 :(得分:1)
你需要一个班级实例来解决这个问题。
创建一个或通过其他方式接收它(函数参数,全局变量,类静态变量等)
答案 3 :(得分:0)
SLaks说得最好:“你不能”
原因如下:
当你声明一个成员变量(不是静态的,参见上面的obj
)时,你告诉编译器每个Lassie2
类型的对象都包含一个指向Lassie1
的指针。 / p>
当声明一个静态方法时,这意味着它独立于该类的所有实例(实际对象)。它不对某个对象进行操作。
因此,在Lasse2::function
内部,没有this
,没有Lassie2
对象可供您获取obj
指针。