朋友 class 不工作
Friend class not working
我收到典型的“...在此上下文中是私有的”错误。
你能告诉我我做错了什么吗?
为了便于阅读,代码被缩短了。
在class SceneEditorWidgetController:
(settingsdialog和这里使用的变量是在header中定义的)
SceneEditorPluginWidgetController::SceneEditorPluginWidgetController()
{
}
void SceneEditorPluginWidgetController::configured()
{
priorKnowledge_setting = settingsDialog->priorKnowledgeProxyFinder->getSelectedProxyName().toStdString(); //This is the context
}
我的classSettingsController.h
namespace Ui {
class SettingsController;
}
namespace GuiController {
class SettingsController : public QDialog
{
Q_OBJECT
friend class SceneEditorPluginWidgetController;
public:
explicit SettingsController(QWidget *parent = 0);
~SettingsController();
private: //it is private here
Ui::SettingsController* ui;
IceProxyFinderBase* priorKnowledgeProxyFinder;
};
}
我无法修改 IceProxyFinderBase class,但它以前确实是这样使用的(我可能是瞎了?)。
有人可以解释一下我做错了什么吗?
使用不合格的 class 名称,friend
声明声明该名称的 class, 在周围的命名空间 中,是一个朋友,如果这样的 class 存在的话。所以这相当于
friend class GuiController::SceneEditorPluginWidgetController;
但是,您的评论说 class 实际上在全局命名空间中,而不是 GuiController
,所以这并不能使它成为朋友。您需要正确地限定它:
friend class ::SceneEditorPluginWidgetController;
我收到典型的“...在此上下文中是私有的”错误。 你能告诉我我做错了什么吗? 为了便于阅读,代码被缩短了。
在class SceneEditorWidgetController: (settingsdialog和这里使用的变量是在header中定义的)
SceneEditorPluginWidgetController::SceneEditorPluginWidgetController()
{
}
void SceneEditorPluginWidgetController::configured()
{
priorKnowledge_setting = settingsDialog->priorKnowledgeProxyFinder->getSelectedProxyName().toStdString(); //This is the context
}
我的classSettingsController.h
namespace Ui {
class SettingsController;
}
namespace GuiController {
class SettingsController : public QDialog
{
Q_OBJECT
friend class SceneEditorPluginWidgetController;
public:
explicit SettingsController(QWidget *parent = 0);
~SettingsController();
private: //it is private here
Ui::SettingsController* ui;
IceProxyFinderBase* priorKnowledgeProxyFinder;
};
}
我无法修改 IceProxyFinderBase class,但它以前确实是这样使用的(我可能是瞎了?)。
有人可以解释一下我做错了什么吗?
使用不合格的 class 名称,friend
声明声明该名称的 class, 在周围的命名空间 中,是一个朋友,如果这样的 class 存在的话。所以这相当于
friend class GuiController::SceneEditorPluginWidgetController;
但是,您的评论说 class 实际上在全局命名空间中,而不是 GuiController
,所以这并不能使它成为朋友。您需要正确地限定它:
friend class ::SceneEditorPluginWidgetController;