0

我有一个 lasse1 的实例,我想在 lasse2 的方法中使用它,这个方法是静态方法,这不起作用:

 class Lasse2{
 ......
public :
static void function(void);
Lasse1* obj;
........
};

现在我想像这样使用它:

void Lasse2::function(void){
obj->dosmt(); // this doesn't work 
.........

知道如何解决这个问题吗?

4

4 回答 4

2

如果要访问类的实例成员,则必须具有该类的实例。没有办法解决这个问题。您的选择是:

  1. 使 obj 成为静态成员。如果您打算为此类的所有实例使用一个 obj,请执行此操作。
  2. 从 function() 中删除静态,使其成为实例方法。

如果您不能执行其中任何一项,那么您需要找到一种方法将实例指针传递给您的函数。例如,需要函数指针的 API 通常具有在最终调用该函数时将指针大小的数据传递给该函数的机制。

于 2013-01-14T15:11:52.530 回答
1

更改静态方法以显式传递对象指针:

static void function(Lasse1* obj)
{
    obj->dosmt(); 
}

但在你这样做之前,考虑一下你真正想要做什么(如果你愿意,甚至可以写另一个问题)。

于 2013-01-14T15:10:53.280 回答
1

你需要一个你的类的实例来实现它。

创建一个或通过其他方式接收它(函数参数、全局变量、类静态变量等)

于 2013-01-14T15:11:04.710 回答
0

SLaks 说得最好:“你不能”

原因如下:

当你声明一个成员变量(不是静态的,见obj上文)时,你是在告诉编译器每个类型的对象都Lassie2包含一个指向 a 的指针Lassie1

当您声明一个静态方法时,这意味着它独立于该类的所有实例(实际对象)。它不对对象进行操作。

所以在里面Lasse2::function,没有this,没有Lassie2对象可以让你从中获取obj指针。

于 2013-01-14T15:12:39.130 回答