访问宇宙 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日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因