朋友班不工作

时间:2015-02-03 19:42:28

标签: c++ class private friend

我得到典型的'...在此上下文中是私有'错误。 你能告诉我我做错了什么吗? 为了便于阅读,缩短了代码。

在SceneEditorWidgetController类中的

: (settingsdialog和此处使用的变量在标题中定义)

SceneEditorPluginWidgetController::SceneEditorPluginWidgetController()
{
}
void SceneEditorPluginWidgetController::configured()
{
    priorKnowledge_setting = settingsDialog->priorKnowledgeProxyFinder->getSelectedProxyName().toStdString(); //This is the context
}

我的类SettingsController.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类,但它之前使用的确如此(我可能是盲目的?)。

有人可以解释一下我做错了吗?

1 个答案:

答案 0 :(得分:16)

使用非限定类名,friend声明声明该名称的类<周围命名空间中的是朋友,如果存在这样的类。所以这相当于

friend class GuiController::SceneEditorPluginWidgetController;

但是,您的评论说该类实际上位于全局命名空间中,而不是GuiController,因此这不会使其成为朋友。您需要正确地对其进行限定:

friend class ::SceneEditorPluginWidgetController;