【发布时间】:2020-08-22 01:28:52
【问题描述】:
必须调用 C 静态函数作为我的 boost 工作线程函数的一部分。C 静态函数作为其他 C++ 代码的一部分工作,但是,它在作为工作线程函数的一部分时无法编译。
以下是我的 C++ 头文件中包含的头文件列表。
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/asio/io_service.hpp>
#include <string>
#include <queue>
和c代码头开始如下
#ifdef __cplusplus
extern "C" {
#endif
#if defined(MS_WINNT) || defined(WIN32)
#include <windows.h>
typedef BSTR ARG;
我无法控制 C 代码,但可以控制我正在调用的 C++ 代码。
我遇到的错误信息如下
错误 C2146:语法错误:缺少 ';'
但是,如果我颠倒包含文件的顺序,我会收到不同的错误消息。
错误 C1189: #error : WinSock.h 已包含
使用带有 boost 1.62 库的 Visual Studio 2010。这种东西可以编译运行吗?
添加 C++ 代码的主要部分。
#ifndef _THREADS
#define _THREADS
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/asio/io_service.hpp>
#include <string>
#include <queue>
namespace testThreads
{
class boostthreads
{
boost::asio::io_service _io_service;
boost::asio::io_service::work _work;
boost::thread_group _Threads;
std::queue<std::string> _queueOfRequests;
boost::mutex _mutex;
void handleCurrentRequest();
unsigned long getThreadId ( std::string& currentThreadIdA);
public:
boostthreads();
~boostthreads();
};
}
#endif
【问题讨论】:
-
你能显示出现 C2146 的代码 sn-p 吗?
-
添加了代码。那是 C++ 头文件。 C 头文件开头已经给出。任何一个命令都不起作用。 (C++ 头文件后跟 C 头文件,反之亦然)。
-
我需要查看出现“语法错误:缺少';'”的行来猜测是什么问题。
-
typedef BSTR ARG 出现语法错误; (它包含在交付的库的头文件中)。我不允许修改库的头文件。
-
看起来库头假定 windows.h 包含在它之前。尝试在 C 标头之前包含 WTypes.h。
标签: c++ multithreading visual-studio-2010 boost boost-asio