Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 全局函数指针。多定义错误_C++_Qt_Function Pointers - Fatal编程技术网

C++ 全局函数指针。多定义错误

C++ 全局函数指针。多定义错误,c++,qt,function-pointers,C++,Qt,Function Pointers,我在delphi dll中有一些函数,我想立即加载它们(使用QtLibrary) 我可以将该函数存储在全局变量中以使用它吗?我试图在.h文件中声明全局函数指针,并在主文件中解析它们,但得到错误“多重定义” mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <qlibrary.h> #include <QDebug> #include "mapwidget.h" MainW

我在delphi dll中有一些函数,我想立即加载它们(使用QtLibrary)

我可以将该函数存储在全局变量中以使用它吗?我试图在.h文件中声明全局函数指针,并在主文件中解析它们,但得到错误“多重定义”

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qlibrary.h>
#include <QDebug>
#include "mapwidget.h"

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

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_pushButton_clicked()
{
    QString path = "map_dll.dll";
    if (QLibrary::isLibrary(path)) {
        lib = new QLibrary(path);
        lib->load();
        if (!lib->isLoaded()) {
            qDebug() << lib->errorString();
        } else {
           nearestWell = (void( *)(double x,
                                double y,
                                double &wellX,
                                double &wellY))
                lib->resolve("nearestWell");

    }
}
可以在头文件中声明变量,但不能定义它们

例如,在头文件中将变量声明为
extern
。您可能会定义它们。将
extern
关键字添加到头文件中的声明中,并在源文件中添加定义。

可以在头文件中声明变量,但不能定义它们

例如,在头文件中将变量声明为
extern
。您可能会定义它们。将
extern
关键字添加到头文件中的声明中,并在源文件中添加定义。

此错误:

对“最近井”的未定义引用

编译器是否在说“我知道有一个东西叫做
nearestWell
,但我不知道它存储在哪里(因为它还没有定义)”

这一行:

extern NearestWellFunc nearestWell;
对编译器说,“在其他地方将有一个名为
nearestWell
nearestWell

这是一个声明——它告诉编译器在以后的某个地方将有一个名为
nearestWell
的变量

它需要与一个定义配对,该定义告诉编译器为变量留出一些空间。在这种情况下,它看起来像:

NearestWellFunc nearestWell = /* whatever the initial value should be */
记住,您只能定义一次,否则编译器会感到困惑。这就是为什么需要将声明放在.cpp文件而不是.h文件中的原因-如果将定义放在头文件中,则包含该头文件的每个.cpp文件都将包含该定义,这就是导致多定义错误的原因

查看您的示例结构,我会将定义放在mainwindow.cpp中。

此错误:

对“最近井”的未定义引用

编译器是否在说“我知道有一个东西叫做
nearestWell
,但我不知道它存储在哪里(因为它还没有定义)”

这一行:

extern NearestWellFunc nearestWell;
对编译器说,“在其他地方将有一个名为
nearestWell
nearestWell

这是一个声明——它告诉编译器在以后的某个地方将有一个名为
nearestWell
的变量

它需要与一个定义配对,该定义告诉编译器为变量留出一些空间。在这种情况下,它看起来像:

NearestWellFunc nearestWell = /* whatever the initial value should be */
记住,您只能定义一次,否则编译器会感到困惑。这就是为什么需要将声明放在.cpp文件而不是.h文件中的原因-如果将定义放在头文件中,则包含该头文件的每个.cpp文件都将包含该定义,这就是导致多定义错误的原因


看看您的示例结构,我会将定义放在mainwindow.cpp中。

如果这确实是头文件中的定义,那么您不应该得到任何多个定义错误。您发布的代码显然不准确或不完整。发布真实代码。这可能是头文件的保护问题。
#ifndef#define#endif
代码看起来不错,但由于它不完整,我们无法确定。问题似乎不在你在这里发布的文章中。是否要提供一个-包括完整的错误消息?如果头文件中确实有这样的消息,那么不应该出现任何多个定义错误。您发布的代码显然不准确或不完整。发布真实代码。这可能是头文件的保护问题。
#ifndef#define#endif
代码看起来不错,但由于它不完整,我们无法确定。问题似乎不在你在这里发布的文章中。是否要提供一个-包括完整的错误消息?
NearestWellFunc nearestWell = /* whatever the initial value should be */