gpt4 book ai didi

c++ - qt - 对 `_imp___Z*misc*googleDNS*' 的 undefined reference

转载 作者:行者123 更新时间:2023-11-28 01:54:52 25 4
gpt4 key购买 nike

大家好

请注意:这里是 C++ 新手

背景信息:

我一直在尝试创建一组库,其中一些库相互使用。

在这种特殊情况下,我必须将 DLL 库添加为外部库。

问题:

错误读取:

netman.cpp:65: error: undefined reference to `_imp___ZN4misc9googleDNSE'

主库代码:

//netmap.cpp - 部分

//...
QHostAddress serverIP = QHostAddress(misc().googleDNS);
//...

//Misc.h - 部分

#ifndef MISC_H
#define MISC_H

#include "misc_global.h"

#include <QString>
#include <QList>


class MISCSHARED_EXPORT misc
{
public:
misc();
~misc();

//Network related
static QString googleDNS;

//Command Codes
static QString CMD_AUTH;
static QString CMD_REQ;

struct User_Settings{
//...
};

//misc.cpp - 部分

#include "misc.h"

misc::misc(){

//Network related
QString googleDNS = QString("8.8.8.8");

//Command Codes
QString CMD_AUTH = QStringLiteral("AUTH");
QString CMD_REQ = QStringLiteral("REQ");

//Request Codes
QString REQ_USER_INFO = QStringLiteral("USER_INFO");
QString REQ_VPN_DATA = QStringLiteral("VPN_DATA");
QString REQ_VPN_UP = QStringLiteral("VPN_UP");

//...
}

注意:如果您可能质疑 misc().googleDNS 的原因,我正在使用这种“方法”来声明和实例化静态字符串。

什么是/可能导致此“_imp__”错误?

帮助将不胜感激!

如果需要更多信息,请发表评论,我会更新并添加

_____________________________________________________________________________

答案/解决方案

首先,感谢@SomeProgrammingDude 提供的解决方案。

//misc.h

#ifndef MISC_H
#define MISC_H

#include "misc_global.h"

#include <QString>
#include <QList>

namespace Misc {

//Network related
QString googleDNS = QString("8.8.8.8");

//Command Codes
QString CMD_AUTH = QString("AUTH");
QString CMD_REQ = QString("REQ");

//Request Codes
QString REQ_USER_INFO = QString("USER_INFO");
QString REQ_VPN_DATA = QString("VPN_DATA");
QString REQ_VPN_UP = QString("VPN_UP");

class MISCSHARED_EXPORT misc
{
public:
misc();
~misc();

//...

};

//...
}
#endif // MISC_H

//misc.cpp

#include "misc.h"

using namespace Misc;

misc::misc(){}

misc::~misc(){}

//...

通过运行 qmake 重建它,然后重建,然后进入“主”库 - netman

//netman.h

//...
#include "misc.h"
#include "gen.h"

using namespace Misc;

class NETMANSHARED_EXPORT netman
{

public:
netman();
netman(QString hostname);
//...
};

#endif // NETMAN_H

//netman.cpp

#include "netman.h"

using namespace Misc;

netman::netman(){
}

然后可以使用两种方法中的一种,非常相似:

//...
QHostAddress serverIP = QHostAddress(googleDNS);
//...

//...
QHostAddress serverIP = QHostAddress(Misc::googleDNS);
//...

但后者是首选。

希望这对其他人有帮助!

最佳答案

两个问题:

  1. 除非您创建 misc 类的实例,否则不会调用构造函数。

  2. 在构造函数中,您将变量定义为本地 变量。 static 成员变量根本没有定义。

为了解决这个问题,我首先建议您使用 namespace 而不是类。只有公共(public)和静态成员的类并不比只有一个简单的命名空间好(我回避了关于全局变量的整个问题)。

然后您需要定义变量,您需要在任何函数之外进行这些操作。直接在文件中做:

QString misc::googleDNS = QString("8.8.8.8");

要将其放在一起,您需要两个文件。

首先是头文件:

#ifndef MISC_H
#define MISC_H

#include "misc_global.h"

#include <QString>
#include <QList>

namespace misc
{
//Network related
MISCSHARED_EXPORT QString googleDNS;

// etc...
}

#endif

然后有源文件:

#include "mish.h"

namespace misc
{
QString googleDNS = QString("8.8.8.8");

// etc...
}

关于c++ - qt - 对 `_imp___Z*misc*googleDNS*' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41562733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com