包含在预编译头中的 std::queue 不是命名空间 std

问题描述

我在通过 C++ (VS 2019) 中的预编译头文件包含头“队列”时遇到问题。

我的 Visual Studio 解决方案由两个项目组成,一个引擎项目(静态库)和一个沙箱项目(链接引擎项目)用于测试引擎的功能。引擎项目使用一个预编译的头文件,因为我正在实现一个消息系统,所以我只是在其中包含了“队列”。两个项目都使用 C++17。

Visual Studio 编译引擎项目没有问题,然后沙箱项目编译时抛出以下错误

错误 C2039 'queue': 不是 'std' (path\to\engine\message_handler.h) 的成员

只要我在 message_handler.h 中直接包含“queue”(请参阅​​代码摘录),错误就会消失并且项目启动得很好。

我使用预编译头文件已经快一年了,从来没有遇到任何问题。 有人能帮我解决这个问题吗?

以下是我的代码的相关摘录。

预编译头:

#pragma once
//memory
#include <memory>

//timing
#include <chrono>
#include <ctime>

//container
#include <vector>
#include <queue>
#include <unordered_map>
#include <array>

//string and streams
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>

//misc
#include <algorithm>
#include <cstdint>
#include <cmath>
#include <random>

message.h

struct Message
{
  Message(){}
  uint32_t id_;
};

message_handler.h

#pragma once
//#include <queue> //fixes the issue
#include "message.h"

using UnqPtr = std::unique_ptr<Message>; 
class MessageHandler
{
  public:
    MessageHandler();

  private:
    static constexpr uint32_t maxMessages_ = 10000;
    std::queue<UnqPtr<Message>,std::vector<UnqPtr<Message>>> msqQueue_;   
}; 

message_handler.cpp

#include "trpch.h" //precompiled header
#include "message_handler.h"

MessageHandler::MessageHandler()
{
  //reserve space in the underlying vector
  std::vector<UnqPtr<Message>> queue;
  queue.reserve(maxMessages_);
  msqQueue_ = std::queue{queue};   
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)