在VC++中编译rtmpd时出错

问题描述:

Iam尝试使用VS2008编译rtmpd Iam出现此错误。在VC++中编译rtmpd时出错

错误63错误C4430:缺少类型说明符 - 假定为int。注意:C++不支持默认int \ variant.h 87 LIB

荫新手到VC++,寻求帮助。

代码是在这里

#ifndef _VARIANT_H 
#define _VARIANT_H 



#include "utils/core.h" 

#ifdef LOG_VARIANT_MEMORY_MANAGEMENT 
#define CONSTRUCTOR  FINEST(" + %d->%d",_constructorCount,_constructorCount+1); _constructorCount++; 
#define DESTRUCTOR  FINEST(" - %d->%d",_constructorCount,_constructorCount-1); _constructorCount--; 
#define DYNAMIC_ALLOC FINEST("(+) %d->%d",_dynamicAllocationCount,_dynamicAllocationCount+1); _dynamicAllocationCount++; 
#define DYNAMIC_FREE FINEST("(-) %d->%d",_dynamicAllocationCount,_dynamicAllocationCount-1); _dynamicAllocationCount--; 
#else 
#define CONSTRUCTOR 
#define DESTRUCTOR 
#define DYNAMIC_ALLOC 
#define DYNAMIC_FREE 
#endif 

typedef enum _VariantType { 
    V_NULL = VAR_ENUM_VALUE_NULL, 
    V_UNDEFINED = VAR_ENUM_VALUE_UNDEFINED, 
    V_BOOL = VAR_ENUM_VALUE_BOOL, 
    V_INT8 = VAR_ENUM_VALUE_INT8, 
    V_INT16 = VAR_ENUM_VALUE_INT16, 
    V_INT32 = VAR_ENUM_VALUE_INT32, 
    V_INT64 = VAR_ENUM_VALUE_INT64, 
    V_UINT8 = VAR_ENUM_VALUE_UINT8, 
    V_UINT16 = VAR_ENUM_VALUE_UINT16, 
    V_UINT32 = VAR_ENUM_VALUE_UINT32, 
    V_UINT64 = VAR_ENUM_VALUE_UINT64, 
    V_DOUBLE = VAR_ENUM_VALUE_DOUBLE, 
    _V_NUMERIC = VAR_ENUM_VALUE_NUMERIC, 
    V_TIMESTAMP = VAR_ENUM_VALUE_TIMESTAMP, 
    V_DATE = VAR_ENUM_VALUE_DATE, 
    V_TIME = VAR_ENUM_VALUE_TIME, 
    V_STRING = VAR_ENUM_VALUE_STRING, 
    V_NAMED_MAP = VAR_ENUM_VALUE_NAMED_MAP, 
    V_MAP = VAR_ENUM_VALUE_MAP 
} VariantType; 

struct VariantMap; 

#define Timestamp struct tm 

class Variant { 
private: 
    VariantType _type; 

    union { 
     bool b; 
     int8_t i8; 
     int16_t i16; 
     int32_t i32; 
     int64_t i64; 
     uint8_t ui8; 
     uint16_t ui16; 

uint32_t的UI32;荫越来越 错误在这行

 uint64_t ui64; 
     double d; 
     Timestamp *t; 
     string *s; 
     VariantMap *m; 
    } _value; 
#ifdef LOG_VARIANT_MEMORY_MANAGEMENT 
    static int _constructorCount; 
    static int _dynamicAllocationCount; 
#endif 
public: 
    Variant(); 
    Variant(const Variant &val); 

    Variant(const bool &val); 
    Variant(const int8_t &val); 
    Variant(const int16_t &val); 
    Variant(const int32_t &val); 
    Variant(const int64_t &val); 
    Variant(const uint8_t &val); 
    Variant(const uint16_t &val); 
    Variant(const uint32_t &val); 
    Variant(const uint64_t &val); 
    Variant(const double &val); 

    Variant(const Timestamp &time); 
    Variant(const uint16_t year, const uint8_t month, const uint8_t day); 
    Variant(const uint8_t hour, const uint8_t min, const uint8_t sec, const uint16_t m); 
    Variant(const uint16_t year, const uint8_t month, const uint8_t day, 
      const uint8_t hour, const uint8_t min, const uint8_t sec, const uint16_t m); 

    Variant(const char *pValue); 
    Variant(const string &value); 

    Variant(const string &key, const Variant &value); 
    Variant(const string &typeName, const string &key, const Variant &value); 

    virtual ~Variant(); 

    void Reset(); 
    string ToString(string name = "", uint32_t indent = 0); 

    Variant & operator=(const Variant &val); 
    Variant & operator=(const bool &val); 
    Variant & operator=(const int8_t &val); 
    Variant & operator=(const int16_t &val); 
    Variant & operator=(const int32_t &val); 
    Variant & operator=(const int64_t &val); 
    Variant & operator=(const uint8_t &val); 
    Variant & operator=(const uint16_t &val); 
    Variant & operator=(const uint32_t &val); 
    Variant & operator=(const uint64_t &val); 
    Variant & operator=(const double &val); 

    Variant & operator=(const Timestamp &val); 

    Variant & operator=(const char *pVal); 
    Variant & operator=(const string &val); 

    operator VariantType(); 
    operator bool(); 
    operator int8_t(); 
    operator int16_t(); 
    operator int32_t(); 
    operator int64_t(); 
    operator uint8_t(); 
    operator uint16_t(); 
    operator uint32_t(); 
    operator uint64_t(); 
    operator double(); 
    operator Timestamp(); 
    operator string(); 

    Variant & operator[](const string &key); 
    Variant & operator[](const char *key); 
    Variant & operator[](const double &key); 
    Variant & operator[](const uint32_t &key); 
    Variant & operator[](Variant &key); 

    bool operator==(Variant variant); 
    bool operator!=(Variant variant); 
    bool operator==(VariantType type); 
    bool operator!=(VariantType type); 

    string GetMapName(); 
    void SetMapName(string name); 
    bool HasKey(const string &key); 
    void RemoveKey(const string &key); 
    void RemoveAt(const uint32_t index); 
    void RemoveAllKeys(); 
    uint32_t MapSize(); 
    void PushToArray(Variant value); 

    map<string, Variant>::iterator begin(); 
    map<string, Variant>::iterator end(); 

    bool IsTimestamp(); 
    bool IsNumeric(); 
    bool IsArray(); 
    void IsArray(bool isArray); 
    bool ConvertToTimestamp(); 

    static bool Deserialize(string &data, Variant &variant); 
    string Serialize(); 
}; 


#endif /* _VARIANT_H */ 

服务器能够在Win32几个版本前运行(见svn的日志),但我不得不削减它以腾出空间用于Linux和Win32。

眼下,服务器是不是在Win32编译。正如EFraim所建议的那样,这些类型在win32上不可用,但您可以轻松定义它们。此外,如果你看看trunk/sources/thelib/platform,你会看到一些目录。 (osx,freebsd等)。选择其中一个并将其复制为win32。之后,开始用代码填补空白。此外,在platform.h包括必要的头文件(你必须在同一个文件的OSX和FreeBSD样品)

让我知道如果你遇到任何问题。

Tx为您对我的项目感兴趣。

最好的问候, 安德烈

附:我建议在rtmpd.com上创建一个帐户,并在那里发布任何问题。它可能有帮助。

+0

嘿,谢谢你的精心解答,刚刚注册你的项目。 那么你应该如何使用typedefs来编译代码呢? – 2009-07-21 15:59:22

uint32_t的朋友和在C99标准中定义的类型。它们受G ++支持,但不支持MSVC++(它不必将它们作为C++编译器支持)。你可以的typedef专用MS类型,如无符号__int32:

typedef unsigned __int32 uint32_t; typedef __int32 int32_t; typedef unsigned __int8 uint8_t;

,e.t.c.