Gremlin92
@Gremlin92
Целеустремленный

Почему не компилирутся данный код?

MyWidget.h
#pragma once

#include <QtWidgets/qwidget.h>
#include <QtWidgets/qtablewidget.h>
#include "DatabaseConnection.h"

#pragma comment(lib,"Qt5Core.lib")
#pragma comment(lib,"Qt5Widgets.lib")
class MyWidget
{
public:
	DatabaseConnection db;
	void InitWidget();
	void Tape(QTableWidget table,bool t);
};

MyWidget.cpp
#include "MyWidget.h"
void MyWidget::InitWidget()
{
    QTableWidget tableworkers;
    QTableWidget tabletasks;
    db.Connect();
    db.Query();
    QWidget self;
    self.setWindowTitle("Task system");
    self.setGeometry(0, 0, 1000, 700);

    db.StandartQuery();
   // QTableWidget tableworkers;
    tableworkers.setParent(&self);
    tableworkers.setColumnCount(db.numCol);
    tableworkers.setRowCount(db.numRow);
    tableworkers.setGeometry(0, 0, 950, 300);
    Tape(tableworkers,false);
    db.Query();
    //QTableWidget table;
    tabletasks.setParent(&self);
    tabletasks.setColumnCount(db.numCol);
    tabletasks.setRowCount(db.numRow);
    tabletasks.setGeometry(0, 300, 950, 300);
    Tape(tabletasks, true);
    
    self.show();
}

void MyWidget::Tape(QTableWidget table,bool t)
{
    QStringList list;
    QString qstr;
    for (int i = 0; i < db.namescol.size(); i++)
    {
        qstr = QString::fromStdString(db.namescol[i]);
        list.push_back(qstr);
    }
    table.setHorizontalHeaderLabels(list);
    vector<vector<string>> v;
    vector<string> tmp;
    if (t)
    {
        char* date_d = new char[50], * date_s = new char[50], * strid = new char[50], * strptask = new char[50];
        for (int i = 0; i < db.vTask.size(); i++)
        {
            itoa(db.vTask[i]->id, strid, 10);
            tmp.push_back(strid);
            tmp.push_back(db.vTask[i]->task);
            itoa(db.vTask[i]->parentTask, strptask, 10);
            tmp.push_back(strptask);
            tmp.push_back(db.vTask[i]->executor);
            strftime(date_d, 50, " %Y-%m-%d", db.vTask[i]->dateDeathLine);
            tmp.push_back(date_d);
            strftime(date_s, 50, "%Y-%m-%d", db.vTask[i]->dateStart);
            tmp.push_back(date_s);
            tmp.push_back(db.vTask[i]->status);
            tmp.push_back(db.vTask[i]->oldtask);
            v.push_back(tmp);
            tmp.clear();
        }
    }
    else
    {
        char*strid = new char[50];
        for (int i = 0; i < db.vWorker.size(); i++)
        {
            itoa(db.vWorker[i]->id, strid, 10);
            tmp.push_back(strid);
            tmp.push_back(db.vWorker[i]->name);
            tmp.push_back(db.vWorker[i]->position);
            v.push_back(tmp);
            tmp.clear();
        }
    }
    for (int i = 0; i < v.size(); i++)
        for (int j = 0; j < v[i].size(); j++)
        {
            qstr = QString::fromStdString(v[i][j]);
            table.setItem(i, j, new QTableWidgetItem(qstr));
        }
}

main.cpp
#include <iostream>
#include <QtWidgets/QApplication>
#include "MyWidget.h"
using namespace std;
int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    MyWidget mw;
    mw.InitWidget();
    return a.exec();
}

Выдает ошибку в двух строках с Tape,предпринята попытка ссылки на удаленную функцию
608d6dcc55ab0246272240.png
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 2
Недоступен файл qtablewiget.h
. Проверьте включаемые пути к файлам
Ответ написан
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Класс QTableWidget имеет удаленный конструктор копирования. Его нельзя копировать.
Вы же передаете QTableWidged tableworkers в функцию по значению. Компилятор пытается скопировать значение и натыкается на эту ошибку.

Передавайте по ссылке или как указатель в вашу функцию Tape. Ну, или через std::move() при вызове, если у класса есть конструктор перемещения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы