2014-11-22 126 views
-1

我有一些问题,与我的实际大学项目,并在我们做C之前C++的开始。问题是,我想调用一个对象的方法,我有一个指针。这个类被称为Mainwindow,它有一个类的对象指针Camera Camera* cam;类Camera具有右转,左转,上转等功能。现在我在鼠标的主窗口中有一个回调,它应该调用相机来转动。我试图做到这一点cam->turnRight();cam.turnRight();这两个都不行。调用相机的主窗口中的方法是静态的,因为回调必须是静态的。来自其他类的对象的C++调用方法

主窗口不是Singleton。

你有任何想法如何使呼叫完成?

由于提前,

Criska48

+0

这些turnMethods是否使用'public'关键字公开? – Anonymous 2014-11-22 19:24:46

+0

没有工作不具描述性。它是如何工作的?并发布一个简短的可编译的可验证示例的代码。 – clcto 2014-11-22 19:25:08

+0

对代码的描述对诊断代码发布过程中的问题并不有帮助。需要大量代码的大多数问题都可以简化为30行以下代码的简单示例,这些代码仍然代表着工作中的概念。一旦您完成了创建演示您的查询的自包含的,可编译的代码示例的练习,我们就可以更有帮助。 – DavidO 2014-11-22 19:25:12

回答

0

在C++中,静态成员函数不能访问任何成员变量,因为没有与该静态成员函数关联的对象。有几种方法,你可以在相机的一个实例传递:

1)传入一个指向要转向静态函数Camera对象(这可能是最好的解决方案)

2)使Mainwindow中的Camera对象指针也是静态的,并用Mainwindow :: camera调用它。这确实意味着你只能为所有的主窗口对象设置一个摄像头对象,而你实际上是在创建一个全局变量。

希望这会有所帮助!

+1

是的,我明白你的意思,你的解决方案将起作用,因为实际上我们只有一个主窗口。也许我以后需要添加一个Singleton。主窗口::凸轮>右拐();确实有效。谢谢! – Criska 2014-11-22 19:32:06

0

您尝试从一个静态成员函数访问非静态数据成员cam。这将无法正常工作,并且无法工作,因为在静态成员函数中,编译器无法知道它应该使用哪个对象的cam

由于回调问题需要使用静态函数,因此需要重新设计代码。怎么样?很难说没有你的问题中的实际代码。

+1

你也是对的,也许会有解决方案,如果我给你的代码,但下面的答案有一个快速的解决方案。 – Criska 2014-11-22 19:35:56

相关问题