问题描述
我在通过 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 (将#修改为@)