首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单Qt程序中的未定义引用

简单Qt程序中的未定义引用
EN

Stack Overflow用户
提问于 2014-01-30 05:13:02
回答 1查看 6K关注 0票数 5

我是一个初学者,在Qt创建者中制作程序。我制作了一个应该使用QtProcess::execute()打开Google的按钮,但是我得到了以下错误:

代码语言:javascript
复制
F:\Users\Amol-2\Desktop\Imp Docs\C++ apps\build-QtMainLProject-Desktop_Qt_5_2_0_MinGW_32bit-Debug\debug\moc_mainwindow.cpp:71: error: undefined reference to `MainWindow::buttonClickHandler()'`
:-1: error:  ld returned 1 exit status

mainwindow.cpp**:**

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_openChrome_clicked()
{
    QString exeloc = "F:\\Users\\Amol-2\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe";
    QProcess::execute(exeloc);
}

mainwindow.h**:**

代码语言:javascript
复制
    namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void buttonClickHandler();


public slots:
    void on_openChrome_clicked();

private:
    Ui::MainWindow *ui;
};

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-30 07:15:12

在您的.h文件中有如下内容:

代码语言:javascript
复制
public slots:
    void buttonClickHandler();

它是一个方法声明,它是一个Qt槽,所以Qt将生成引用它的代码(为连接的信号等调用它)。然后链接器尝试链接该代码以创建应用程序二进制。但似乎在任何地方都没有方法定义(实际代码)。

3个可能的解决办法:

1.

.h文件中删除槽声明,因为您似乎没有使用它。

2.

通过在.h文件中更改上面的代码段来添加冲突:

代码语言:javascript
复制
public slots:
    void buttonClickHandler() { /* add code if you want some */ }

这会将声明转换为(内联成员函数的)定义。

3.

或者,将方法定义添加到.cpp文件中,就像对其他方法一样:

代码语言:javascript
复制
void MainWindow::buttonClickHandler() {
    // your code here
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21448326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档