非法使用此类型作为表达式(错误)c++

illegal use of this type as expression (error) C++

本文关键字:表达式 错误 c++ 类型 非法      更新时间:2023-10-16

我最近添加到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':非法使用此类型作为表达式

你知道怎么解决这个问题吗?

很可能拼写错误的private会混淆下一行声明BUFFER bfTaskBuffer的编译器。

编辑:还有一些关于代码和样式的注释:

  • 双下划线在任何上下文中都是保留的,而前导下划线是在某些上下文中(后面跟着大写字母或在全局命名空间中,可能还有其他)。就用DRONEPOOL_H吧。
  • 通常所有的大写字母都保留给常量。考虑Dronepool代替DRONEPOOL
  • 不使用#define作为指针别名,使用typedef: 类定义之后执行typedef DRONEPOOL* LPDRONEPOOL;,它创建类型别名,而不是文本替换。