首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qt -对`_imp___Z*misc*googleDNS*‘的未定义引用

qt -对`_imp___Z*misc*googleDNS*‘的未定义引用
EN

Stack Overflow用户
提问于 2017-01-10 06:47:33
回答 1查看 550关注 0票数 0

万事如意

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

背景信息:

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

在这种情况下,我必须添加作为外部库的DLL库。

问题:

错误内容如下:

netman.cpp:65:错误:对`_imp___ZN4misc9googleDNSE的未定义引用

主库中的代码:

//netmap.cpp -部分

代码语言:javascript
复制
//...
QHostAddress serverIP = QHostAddress(misc().googleDNS);
//...

//Misc.h -部分

代码语言:javascript
复制
#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 -部分

代码语言:javascript
复制
#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__“错误?

我会很感激你的帮助!

如果需要更多信息,请留下评论,我将更新并添加

_________________________________________________________________________

ANSWER/Solution

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

//misc.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#include "misc.h"

using namespace Misc;

misc::misc(){}

misc::~misc(){}

//...

通过运行qmake重新构建它,然后重新构建,然后继续到"main“库- netman

//netman.h

代码语言:javascript
复制
//...
#include "misc.h"
#include "gen.h"

using namespace Misc;

class NETMANSHARED_EXPORT netman
{

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

#endif // NETMAN_H

//netman.cpp

代码语言:javascript
复制
#include "netman.h"

using namespace Misc;

netman::netman(){
}

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

代码语言:javascript
复制
//...
QHostAddress serverIP = QHostAddress(googleDNS);
//...

代码语言:javascript
复制
//...
QHostAddress serverIP = QHostAddress(Misc::googleDNS);
//...

但后者更可取。

希望这能帮到别人!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-10 06:51:45

两个问题:

  1. 除非创建misc类的实例,否则不会调用构造函数。
  2. 在构造函数中,将变量定义为局部变量。根本没有定义static成员变量。

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

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

代码语言:javascript
复制
QString misc::googleDNS = QString("8.8.8.8");

要把它放在一起,你需要两个文件。

首先,头文件:

代码语言:javascript
复制
#ifndef MISC_H
#define MISC_H

#include "misc_global.h"

#include <QString>
#include <QList>

namespace misc
{
    //Network related
    MISCSHARED_EXPORT QString googleDNS;

    // etc...
}

#endif

然后拥有源文件:

代码语言:javascript
复制
#include "mish.h"

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

    // etc...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41562733

复制
相关文章

相似问题

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