2009-07-20 73 views
0

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 */ 

回答

1

服務器能夠在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

1

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.