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

时间:2011-04-28 14:57:30

标签: c++ types

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

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:5)

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

编辑: 还有一些关于代码和风格的评论:

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