std::shared_ptr
オブジェクトを作成すると、std::shared_ptr
がパラメータとして「オブジェクトの初期化に一致するコンストラクタがありません」というコンパイルエラーが発生しました。オブジェクトの共有ポインタをパラメータとして作成する
私のコードは次のようになります。
// Sidebar Widgets
_widgets.sideBarWidgetLeft = std::make_shared<SideBarWidget>();
_widgets.sideBarWidgetLeft->hide();
_widgets.sideBarWidgetRight = std::make_shared<SideBarWidget>();
_widgets.sideBarWidgetRight->hide();
// Pointer Test
CalibrationManagementWidget* test = new CalibrationManagementWidget(_widgets.sideBarWidgetLeft, 0);
// Sidebar Left
_widgets.calibrationManagementWidget = std::make_shared<CalibrationManagementWidget>(_widgets.sideBarWidgetLeft, 0);
_widgets.calibrationManagementWidget->hide();
_widgets.cameraWidget = std::make_shared<CameraWidget>(0, VISUALISATION_TYPE_NORMAL);
_widgets.cameraWidget->hide();
を「ポインタのテストは」うまくコンパイルしますが、「サイドバー左」の下の行は、名前のエラーを作成します。私が間違ってインスタンス化していることがあるのですか?これは一般的に可能ではありませんか?私もCalibrationWidgetのコンストラクタが含まれているいくつかのスニペットを投稿します要求したよう
:
/usr/include/c++/5.4.0/ext/new_allocator.h:120: Error: no matching constructor for initialization of 'CalibrationManagementWidget'
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
編集:ここでは
はエラーメッセージ(複数可)(の1つ)です。ここで
calibrationwidget.h
...
Q_INVOKABLE CalibrationManagementWidget(QWidget* parent = 0 , VisualisationType visuType = VISUALISATION_TYPE_TRANSLATOR);
CalibrationManagementWidget(std::shared_ptr<SideBarWidget> sideBarWidget, QWidget* parent = 0);
virtual ~CalibrationManagementWidget();
...
calibrationwidget.cpp
...
CalibrationManagementWidget::CalibrationManagementWidget(QWidget* parent, enum VisualisationType visuType) : CommonWindowWidget(WIDGET_TYPE_3D, "", "Calibration Management", 0, Ui::UI_WINDOW_FLAG_CLOSABLE, 0, parent, visuType) {
_currentMessage = 0;
_selectedCalibrationType = CALIBRATION_TYPE_UNKNOWN;
_messageEventLoop = new QEventLoop(this);
_updateTimer = new QTimer();
setupUi();
}
CalibrationManagementWidget::CalibrationManagementWidget(std::shared_ptr<SideBarWidget> sideBarWidget, QWidget* parent) : CommonWindowWidget(WIDGET_TYPE_3D, "", "Calibration Management", 0, Ui::UI_WINDOW_FLAG_CLOSABLE, sideBarWidget, parent) {
_currentMessage = 0;
_selectedCalibrationType = CALIBRATION_TYPE_UNKNOWN;
_messageEventLoop = new QEventLoop(this);
_updateTimer = new QTimer();
setupUi();
}
CalibrationManagementWidget::~CalibrationManagementWidget() {
delete _messageEventLoop;
_messageEventLoop = 0;
delete _updateTimer;
_updateTimer = 0;
}
...
もCommonWindowWidgetから抜粋されています。
commonwindowwidget.h
...
CommonWindowWidget(WidgetType widgetType, const QString& headerTitle = "Foldable Widget", const string& pageName = "Foldable Widget", unsigned int view = 0, unsigned int uiWindowFlags = 0, std::shared_ptr<SideBarWidget> sideBarWidget = 0, QWidget* parent = 0, VisualisationType visuType = VISUALISATION_TYPE_NORMAL);
virtual ~CommonWindowWidget();
...
commonwindowwidget.cpp
...
CommonWindowWidget::CommonWindowWidget(WidgetType widgetType, const QString& headerTitle, const string& pageName, unsigned int view, unsigned int uiWindowFlags, std::shared_ptr<SideBarWidget> sideBarWidget, QWidget* parent, VisualisationType visuType) : CommonStackedWidget(widgetType, pageName, view, parent, visuType) {
_windowFlags = uiWindowFlags;
_sideBarWidget = std::move(sideBarWidget);
setupUi();
_ui.headerWidget->headerLabel()->setText(headerTitle);
connect(_ui.headerWidget, SIGNAL(headerDoubleClicked()), this, SLOT(changeFoldState()));
connect(_ui.headerWidget, SIGNAL(changeFoldStateClicked()), this, SLOT(changeFoldState()));
connect(_ui.headerWidget, SIGNAL(closeClicked()), this, SLOT(navigateToHome()));
}
CommonWindowWidget::~CommonWindowWidget() {
}
...
CalibrationManagementWidget(共有ポインタを取るべきもの)のコンストラクタを表示してください – SingerOfTheFall
'CalibrationManagementWidget'は明らかに何らかの種類なので、' something.CalibrationManagementWidget = whatever'は 'something.int = whatever '。あなたがしようとしていることは何でも、動作しません。 –
@SamVarshavchik、それは 'something.calibrationManagementWidget'(小文字のc)なので、おそらくクラスと同じ名前のフィールドです。 – SingerOfTheFall