万事如意
请注意:这里是C++新手
背景信息:
我一直在尝试创建一组库,其中有几个库相互使用。
在这种情况下,我必须添加作为外部库的DLL库。
问题:
错误内容如下:
netman.cpp:65:错误:对`_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__“错误?
我会很感激你的帮助!
如果需要更多信息,请留下评论,我将更新并添加
_________________________________________________________________________
ANSWER/Solution
首先,感谢@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重新构建它,然后重新构建,然后继续到"main“库- 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);
//...但后者更可取。
希望这能帮到别人!
发布于 2017-01-10 06:51:45
两个问题:
misc类的实例,否则不会调用构造函数。static成员变量。为了解决这个问题,我首先建议您使用namespace而不是类。只有公共和静态成员的类比一个简单的namespace更好(我回避了关于全局变量的整个问题)。
然后,您需要定义变量,这需要在任何函数之外执行。直接在文件中执行:
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...
}https://stackoverflow.com/questions/41562733
复制相似问题