我添加到VC ++ 2010项目中的最新文件突然给出了有关数据类型的错误。 在做了一些搜索之后,这个错误似乎在C代码中很常见,但我使用的是C ++(是的,我的文件扩展名是正确的)。 我的BUFFER类在我的所有其他文件中仍能正常工作,如果我对它们进行注释,它也会抛出与Windows UINT类型相同的错误。
不过,这是来自“DRONEPOOL.h”我的代码:
//#include <winsock2.h>
//#include <ws2tcpip.h>
#include <Windows.h>
#include "BUFFER.h"
#ifndef __DRONEPOOL_H__
#define __DRONEPOOL_H__
#define DRONE_POOL_SIZE 100
#define DRONESTATE_EMPTY 0
#define DRONESTATE_IDLE 1
#define DRONESTATE_WORKING 2
#define DRONESTATE_PICKUP 3 // work result ready for pickup
#define LPCLIENTCONNECTION CLIENTCONNECTION*
struct CLIENTCONNECTION
{
// SOCKET skSocket;
WORD wState;
};
#define LPDRONEPOOL DRONEPOOL*
class DRONEPOOL
{
pritave:
BUFFER bfTaskBuffer;
BUFFER bfResultBuffer;
CLIENTCONNECTION ccPool[DRONE_POOL_SIZE];
UINT iPoolHead;
UINT iPoolTail;
HANDLE hPoolMutex;
HANDLE hManagerThread;
static DWORD WINAPI Manager(__in LPVOID);
public:
DRONEPOOL();
~DRONEPOOL();
BOOL InsertDrone(SOCKET);
BOOL AssignTask(LPXMSG);
BOOL PeekResult(LPXMSG);
BOOL GetResult(LPXMSG);
};
#endif
错误是:ERROR C2275:'BUFFER':非法使用此类型作为表达式
知道如何解决这个问题吗?
答案 0 :(得分:5)
拼写错误的private
很可能会混淆编译器在宣布BUFFER bfTaskBuffer
的下一行。
编辑: 还有一些关于代码和风格的评论:
DRONEPOOL_H
。Dronepool
而不是DRONEPOOL
。#define
作为指针别名,而是使用typedef:在之后,类定义执行typedef DRONEPOOL* LPDRONEPOOL;
,这会创建一个类型别名,而不是文本替换。