为队列创建c ++全局变量

时间:2018-04-23 18:41:55

标签: c++ visual-studio-2017 queue global-variables extern

注意:此问题已在另一篇文章中解决。该帖子的链接包含在底部。

我正在使用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++ 我已经使用自己的类实现了它,并且它可以工作。 我不知道为什么我昨天没有看到(或者可能没有注意到)这个结果。

1 个答案:

答案 0 :(得分:1)

我认为这是一个链接器问题。 只需将定义放入.cpp文件(省略extern):

queue<Message*> g_incoming;