- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好
请注意:这里是 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);
//...
但后者是首选。
希望这对其他人有帮助!
最佳答案
两个问题:
除非您创建 misc
类的实例,否则不会调用构造函数。
在构造函数中,您将变量定义为本地 变量。 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/
大家好 请注意:这里是 C++ 新手 背景信息: 我一直在尝试创建一组库,其中一些库相互使用。 在这种特殊情况下,我必须将 DLL 库添加为外部库。 问题: 错误读取: netman.cpp:65:
我是一名优秀的程序员,十分优秀!