注意:此问题已在另一篇文章中解决。该帖子的链接包含在底部。
我正在使用Visual Studio 2017社区版。 我有一个队列,我想成为一个全局变量。
我的主要例程如下:
#include "TestClass.h"
using namespace std;
extern queue<Message*> g_incoming;
int main()
{
PFRHelloMessage* msg1 = new PFRHelloMessage( 0, 1, 2, 30, 40, 1500, 45, 17);
g_incoming.push(msg1);
DropLinkMessage* msg2 = new DropLinkMessage( 1, 3, 4);
g_incoming.push(msg2);
AddLinkMessage* msg3 = new AddLinkMessage( 2, 5, 6);
g_incoming.push(msg3);
//while (!g_incoming.empty())
//{
// Message* m = g_incoming.front();
// g_incoming.pop();
// cout << m->getType() << endl;
//}
TestClass* tc = new TestClass();
tc->dump();
return 0;
TestClass看起来像这样:
#include "TestClass.h"
#include <queue>
#include "Message.h"
extern queue<Message*> g_incoming;
void dump()
{
cout << "start: externally accessed" << endl;
//while (!g_incoming.empty())
//{
// Message* m = g_incoming.front();
// g_incoming.pop();
// cout << m->getType() << endl;
//}
cout << "end: externally accessed" << endl;
}
我得到的错误告诉我,我有两个未解决的外部变量。 (当然这不是真正的程序。我在这里显然不需要外部变量。我需要弄清楚这对于真实程序是如何工作的。)
解决方案: 这个问题的每个评论都提供了一些有用的信息;然而, 我发现这是一个重复的问题,完成示例答案的链接在这里: When to use extern in C++ 我已经使用自己的类实现了它,并且它可以工作。 我不知道为什么我昨天没有看到(或者可能没有注意到)这个结果。
答案 0 :(得分:1)
我认为这是一个链接器问题。 只需将定义放入.cpp文件(省略extern):
queue<Message*> g_incoming;