18

I am getting the typical '... is private within this context' error. Can you tell me what I am doing wrong? Code is shortened for readability.

in class SceneEditorWidgetController: (settingsdialog and the variable used here is defined in the header)

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

My class 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;
    };
}

I cannot modify the IceProxyFinderBase class, but it was used exactly (I'm probably blind?) like this before.

Could somebody please explain what I am doing wrong?

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
RunOrVeith
  • 4,487
  • 4
  • 32
  • 50

1 Answers1

38

With an unqualified class name, the friend declaration declares that a class of that name, in the surrounding namespace, is a friend, if such a class exists. So this is equivalent to

friend class GuiController::SceneEditorPluginWidgetController;

However, your comments say that the class is actually in the global namespace, not GuiController, so this doesn't make it a friend. You'll need to qualify it correctly:

friend class ::SceneEditorPluginWidgetController;
Mike Seymour
  • 249,747
  • 28
  • 448
  • 644