首页 > 解决方案 > 包含在预编译头文件中的 std::queue 不是命名空间 std 的一部分

问题描述

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

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

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

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

一旦我直接在 message_handler.h 中包含“队列”(参见代码摘录),错误就会消失,项目启动得很好。

我已经使用预编译头将近一年了,从来没有遇到任何问题。谁能帮我这个?

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

预编译头文件:

#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>

消息.h

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

消息处理程序.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};   
}

标签: c++visual-studio-2019precompiled-headers

解决方案


推荐阅读