Я получаю типичную ошибку «... является частной в этом контексте». Можете ли вы сказать мне, что я делаю неправильно? Код сокращен для удобства чтения.Класс друга не работает
в классе 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, но был использован точно (я, вероятно, слепой?), как это раньше.
Может кто-нибудь объяснить, что я делаю неправильно?
Является 'SceneEditorPluginWidgetController' в том же пространстве имен,' GuiController'? Если нет, то безоговорочная декларация 'friend' относится к другому классу. –
SceneEditorWidgetController без пространства имен, как бы объявить это? – RunOrVeith
Вы имеете в виду, что это в глобальном пространстве имен? Подтвердите его как ':: SceneEditorPluginWidgetController'. –