c++ - 包含在预编译头文件中的 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};
}
解决方案
推荐阅读
- ios - 使用自定义标志构建 Carthage 依赖项
- javascript - React-native:当输入有空文本时,计算返回 NaN
- javascript - 如何为 js 库中触发的事件传递抑制警告?
- css - CSS 改变每个光标
- video - 如何连接具有不同属性的ffmpeg中的视频?
- selenium - “ChromeHeadless 在 60000 毫秒内没有捕获,正在杀戮。” 仅发生在 Gitlab 托管的 CI/CD 管道中
- tweepy - Tweepy 的特定超时错误解决方法
- java - 如何将所有行从表中获取到 Android 应用程序
- c++ - 如何从列表中将对象添加到图表中?
- django - Django REST 框架和 XML。更改 item_tag_name、root_tag_name 等