C++ qt-未定义的对“\u imp\uuuuuuz*misc*googleDNS*'”的引用;
大家好 请注意:C++新手在这里 背景信息: 我一直在尝试创建一组库,其中一些库相互使用 在这种特殊情况下,我必须将DLL库添加为外部库 问题: 错误内容如下: netman.cpp:65:错误:未定义对“\u imp\u\u ZN4misc9googleDNSE”的引用 主库中的代码: //netmap.cpp-部分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
//...
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“线索”只是看到构造函数中的定义。