我正在使用Visual C++ Express创建一个DLL,并且在声明时extern ValveInterfaces* VIFace内的Required.h,编译器告诉我ValveInterfaces未定义。 (我想将VIFace公开到包括Required.h的任何文件中)

这是我文件的结构:

DLLMain.cpp

#include "Required.h" //required header files, such as Windows.h and the SDK

ValveInterfaces* VIFace;

//the rest of the file

必需。h
#pragma once
//include Windows.h, and the SDK
#include "ValveInterfaces.h"

extern ValveInterfaces* VIFace; //this line errors

ValveInterfaces.h
#pragma once
#ifndef _VALVEINTERFACES_H_
#define _VALVEINTERFACES_H_
#include "Required.h"

class ValveInterfaces
{
public:
    ValveInterfaces(void);
    ~ValveInterfaces(void);
    static CreateInterfaceFn CaptureFactory(char *pszFactoryModule);
    static void* CaptureInterface(CreateInterfaceFn fn, char * pszInterfaceName);
    //globals
    IBaseClientDLL* gClient;
    IVEngineClient* gEngine;
};
#endif

错误的屏幕截图:
http://i.imgur.com/lZBuB.png

最佳答案

第一个错误:

error C2143: syntax error : missing ';' before '*'

是一个死掉的礼物,表明在您首次尝试使用ValveInterfaces类型时尚未定义它。

因为ValveInterfaces的类型是未知的,所以几乎总是会发生这种情况。既然已经切掉了大量的ValveInterfaces.h,这很难说出来,但是,即使在那里定义了它,也可能是#pragma once的怪异组合,而且_REQUIRED_H的明显放错了位置,包括防护罩(它们通常在required.h中)引起你的悲伤

关于c++ - extern关键字 "missing type specifier",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8877003/

10-12 02:58