2015-02-03 3 views
3

Я получаю типичную ошибку «... является частной в этом контексте». Можете ли вы сказать мне, что я делаю неправильно? Код сокращен для удобства чтения.Класс друга не работает

в классе 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, но был использован точно (я, вероятно, слепой?), как это раньше.

Может кто-нибудь объяснить, что я делаю неправильно?

+0

Является 'SceneEditorPluginWidgetController' в том же пространстве имен,' GuiController'? Если нет, то безоговорочная декларация 'friend' относится к другому классу. –

+0

SceneEditorWidgetController без пространства имен, как бы объявить это? – RunOrVeith

+0

Вы имеете в виду, что это в глобальном пространстве имен? Подтвердите его как ':: SceneEditorPluginWidgetController'. –

ответ

8

С неполным именем класса, то friend декларация заявляет, что класс этого имени, в окружающем пространстве имен, является другом, если такой класс существует. Таким образом, это эквивалентно

friend class GuiController::SceneEditorPluginWidgetController; 

Однако ваши комментарии говорят, что класс на самом деле в глобальном пространстве имен, не GuiController, так что это не делает его другом. Вам необходимо правильно квалифицировать:

friend class ::SceneEditorPluginWidgetController; 
Смежные вопросы