C++ qt-未定义的对“\u imp\uuuuuuz*misc*googleDNS*'”的引用;

C++ qt-未定义的对“\u imp\uuuuuuz*misc*googleDNS*'”的引用;,c++,qt,C++,Qt,大家好 请注意:C++新手在这里 背景信息: 我一直在尝试创建一组库,其中一些库相互使用 在这种特殊情况下,我必须将DLL库添加为外部库 问题: 错误内容如下: netman.cpp:65:错误:未定义对“\u imp\u\u ZN4misc9googleDNSE”的引用 主库中的代码: //netmap.cpp-部分 //... QHostAddress serverIP = QHostAddress(misc().googleDNS); //... #ifndef MISC_H #defi

大家好

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

背景信息:

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

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

问题:

错误内容如下:

netman.cpp:65:错误:未定义对“\u imp\u\u ZN4misc9googleDNSE”的引用

主库中的代码:

//netmap.cpp-部分

//...
QHostAddress serverIP = QHostAddress(misc().googleDNS);
//...
#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{
    //...
};
#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");

    //...
}
//杂项h-部分

//...
QHostAddress serverIP = QHostAddress(misc().googleDNS);
//...
#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{
    //...
};
#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
的原因,我将使用此“方法”来声明和实例化静态字符串

是什么/可能导致此“\u imp\u”错误?

谢谢你的帮助

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

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu强

答案/解决方案

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

//杂项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
//...
#include "misc.h"
#include "gen.h"

using namespace Misc;

class NETMANSHARED_EXPORT netman
{

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

#endif // NETMAN_H
通过运行qmake,然后重新生成,并继续到“主”库-
netman
来重新生成

//netman.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
//...
#include "misc.h"
#include "gen.h"

using namespace Misc;

class NETMANSHARED_EXPORT netman
{

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

#endif // NETMAN_H
//netman.cpp

#include "misc.h"

using namespace Misc;

misc::misc(){}

misc::~misc(){}

//...
#include "netman.h"

using namespace Misc;

netman::netman(){
}
然后可以使用两种方法中的一种,非常类似:

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

但后者更受欢迎

希望这能帮助别人

两个问题:

  • 除非创建
    misc
    类的实例,否则将不会调用构造函数

  • 在构造函数中,将变量定义为局部变量。
    静态
    成员变量根本没有定义

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

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

    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
    
    两个问题:

  • 除非创建
    misc
    类的实例,否则将不会调用构造函数

  • 在构造函数中,将变量定义为局部变量。
    静态
    成员变量根本没有定义

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

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

    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
    

    非常感谢,我将把我的解决方案作为问题更新。我想问一下,是什么“线索”帮助你找到了我问题的解决方案——如果这看起来像个愚蠢的问题,那么很抱歉——因为这种逻辑将帮助我解决进一步的问题,希望如此@KGCybeX“线索”只是看到了构造函数中的定义。非常感谢,我将把我的解决方案作为一个问题更新。我想问一下,是什么“线索”帮助你找到了我问题的解决方案——如果这看起来像个愚蠢的问题,那么很抱歉——因为这种逻辑将帮助我解决进一步的问题,希望如此@KGCybeX“线索”只是看到构造函数中的定义。