访问宇宙 2023-03-07 10:15 采纳率: 80.4%
浏览 26
已结题

如何解决error: undefined reference to 报错?


static QStack<QTableWidget*> undo_stack = *new QStack<QTableWidget*>();
static QStack<QTableWidget*> redo_stack = *new QStack<QTableWidget*>();
static int temp_reundo = 1;//撤销重做用

class Page0;
class Page1;
class Page2;
class Page3;

class MainWindow1 : public QWidget
{
public:
    Page0 *page0;
    Page1 *page1;
    Page2 *page2;
    Page3 *page3;
    QString filename;
    //ExcelHelper excelHelper;

    //改为public static 以在Page中调用
    static QTableWidget *dt;//初始表
    static QTableWidget *dt_copy;//初始表
    static QTableWidget *dt2;//端口定义表
    static QTableWidget *dt3;//连接关系表
    static QTableWidget *dt_partnum;//partnum类
    static QTableWidget *dt_search;//搜索表

    //撤消重做按钮
    static QPushButton *undo;
    static QPushButton *redo;

    //combobox
    static QComboBox *cb;

    //search
    static QTextEdit *search_tb;

public:
    MainWindow1();
    ~MainWindow1();
    static QString findIO(QString boxName,QString pinId); //根据BOX名和PIN找到分配的IO号
    //bool cmp(QPair<int,int>a,QPair<int,int>b);//升序排列比较
    static void update_dt23();//更新dt2和dt3
    static void self_check();//自检  //(1)某条线有起点没有终点,(2)某导线所在box的pin number大于box的最大pin数量
    static void partnum_combobox_update();//更新partnum的combobox的选择

    void qTableWidget_Copy(QTableWidget *a, QTableWidget *b); //把表格a的东西复制给表格b

private:
    void MenuItem_Exit_Click(QObject *obj, QEvent *event);//退出程序
    void readExcel_Click(QObject *obj, QEvent *event);//读导入的Excel表
    void readAll_Click(QObject *obj, QEvent *event);//四个表都读
    void button_file_save_Click(QObject *obj, QEvent *event);//保存文件

    //撤销重做指对dt的修改
    void undo_Clicked(QObject *obj, QEvent *event); //撤销 /* 声明对象 undo 的槽函数 */
    void redo_Clicked(QObject *obj, QEvent *event); //重做 /* 声明对象 redo 的槽函数 */

    void searchButton_Click(QObject *obj, QEvent *event);//搜索

private slots:
    void page0_Click(QObject *obj, QEvent *event);//page0导航按钮绑定事件,用来查看PartNumber表
    void page1_Click(QObject *obj, QEvent *event);//page1导航按钮绑定事件,用来查看初始数据
    void page2_Click(QObject *obj, QEvent *event);//page2导航按钮绑定事件,用来查看端口定义
    void page3_Click(QObject *obj, QEvent *event);//page2导航按钮绑定事件,用来查看连接关系
};

#endif // MAINWINDOW1_H
 MainWindow1::MainWindow1()//构造函数
{

    page0 = *new Page0*();
    page1 = *new Page1*();
    page2 = *new Page2*();
    page3 = *new Page3*();

    //撤消重做按钮
    undo->setEnabled(false);
    redo->setEnabled(false); // 当setEnabled() 和 setClickable() 设置成false ,按钮就不可点击,设置成true,按钮就可以点击。

     //dt_partnum 读已保存的文件
    dt_partnum->setColumnCount(4);
    dt_partnum->setItem(0,0,new QTableWidgetItem("PartNumber"));
    dt_partnum->setItem(0,1,new QTableWidgetItem("Code"));
    dt_partnum->setItem(0,2,new QTableWidgetItem("Step"));
    dt_partnum->setItem(0,3,new QTableWidgetItem("Option"));

}
void MainWindow1::partnum_combobox_update()//更新partnum的combobox的选择
{
   cb->clear();
   for(int i=1;i<dt_partnum->rowCount();i++)
   {
       bool exist = false;
       for(int j=0;j<cb->count();j++)
       {
           QString result = cb->itemText(j);
           if(dt_partnum->item(i,0)->text()==result)
           {
               exist = true;
               break;
           }
       }
       if(exist==false)
       {
           cb->insertItem(cb->count(),dt_partnum->item(i,0)->text());
           //指定位置插入单个item(在最后插入)
       }
   }

}

系统报错
error: undefined reference to `MainWindow1::cb'

error: undefined reference to `MainWindow1::dt_partnum'

头文件里有定义这些参数,为什么会报错?
  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-03-07 10:28
    关注

    “Devil组”引证GPT后的撰写:

    这个错误是由于链接器找不到MainWindow1类中声明的静态变量cb和dt_partnum的实际定义。这通常发生在将头文件包含在多个源文件中时。

    为了解决这个错误,需要将cb和dt_partnum的实际定义放在一个源文件中,例如MainWindow1.cpp文件中。在该文件中添加以下代码:

    QTableWidget *MainWindow1::dt_partnum = new QTableWidget();
    QComboBox *MainWindow1::cb = new QComboBox();
    
    

    然后在MainWindow1构造函数中删除对cb和dt_partnum的实例化代码,因为它们已经在MainWindow1.cpp文件中定义。

    MainWindow1::MainWindow1()//构造函数
    {
        page0 = *new Page0*();
        page1 = *new Page1*();
        page2 = *new Page2*();
        page3 = *new Page3*();
        //撤消重做按钮
        undo->setEnabled(false);
        redo->setEnabled(false); // 当setEnabled() 和 setClickable() 设置成false ,按钮就不可点击,设置成true,按钮就可以点击。
        //在MainWindow1.cpp中定义静态变量cb和dt_partnum
        //dt_partnum 读已保存的文件
        dt_partnum->setColumnCount(4);
        dt_partnum->setItem(0,0,new QTableWidgetItem("PartNumber"));
        dt_partnum->setItem(0,1,new QTableWidgetItem("Code"));
        dt_partnum->setItem(0,2,new QTableWidgetItem("Step"));
        dt_partnum->setItem(0,3,new QTableWidgetItem("Option"));
    }
    
    

    这样就可以解决链接器找不到静态变量的问题了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 CMAKE+VS2019+QT5.15.2组合进行二次编译
  • ¥15 nginx 配置静态html访问 ,后台登录时页面始终被重定向到登录页,无法访问到后台的静态html页
  • ¥20 自动登录的j2ee程序编译
  • ¥15 fluent模拟静态气体扩散
  • ¥15 java根据模板,生成word文档,需要带目录
  • ¥15 广告联盟的兜底广告是什么意思
  • ¥15 如何证明高斯噪声的包络公式
  • ¥150 寻找王者荣耀开发作者,合作或者解答
  • ¥15 关于cpci总线的几个问题,别用人工智能回答
  • ¥15 乳腺癌数据集 相关矩阵 特征选择