朋友 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;