小さなユーティリティアプリケーションをより新しいC++方式に更新しようとしていますが、std :: shared_ptrでいくつかのQtオブジェクト、特にコンストラクター引数として他のQWidgetを受け取るオブジェクトの使用に問題があります。
例えば:
private:
std::shared_ptr<QWidget> centralwidget;
std::shared_ptr<QVBoxLayout> verticalLayout;
public:
void setupUi(QMainWindow *MainWindow) // this pointer is a .get() from a shared_ptr
{
centralwidget = std::make_shared<QWidget>(new QWidget(MainWindow)); // compiles fine
verticalLayout = std::make_shared<QVBoxLayout>(new QVBoxLayout(centralwidget.get())); // does not compile
}
コンパイルエラーは次のとおりです。
エラー1エラーC2664:'QVBoxLayout :: QVBoxLayout(QWidget *)':パラメーター1を'QVBoxLayout*'から'QWidget *'に変換できませんe:\ microsoft visual studio 11.0 \ vc \ include \ memory 855
このエラーを理解できないようです。何も変換していません。QVBoxLayoutオブジェクトを作成し、その親としてQWidgetを渡そうとしています(生のポインターの場合と同じように)。