2009-07-20 12 views
0

이 오류가 발생하면서 VS2008을 사용하여 rtmpd를 컴파일하려고했습니다.VC++에서 rtmpd를 컴파일하는 중 오류가 발생했습니다.

오류 63 오류 C4430 : 누락 된 형식 지정자 - 가정합니다. 참고 : C++은 default-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 로그 참조) 리눅스와 win32 용 공간을 만들기 위해 서버를 잘라야했습니다.

지금 당장 서버는 win32에서 컴파일 할 수 없습니다. EFraim이 제안했듯이 이러한 유형은 win32에서 사용할 수 없지만 쉽게 정의 할 수 있습니다. 게다가, trunk/sources/thelib/platform을 보면 몇 개의 디렉토리가 보일 것입니다. (osx, freebsd 등). 그 중 하나를 선택하여 win32로 복사하십시오. 그 후에 코드로 간격을 메우십시오. 또한 platform.h에 필요한 헤더 파일을 포함하십시오 (동일한 파일에 osx 및 freebsd에 대한 샘플이 있음)

문제가 발생하면 알려주십시오.

내 프로젝트에 관심있는 Tx.

안부, 안드레이

P.S. 나는 또한 rtmpd.com에 계정을 만들고 거기에 어떤 질문도 게시 할 것을 제안합니다. 도움이 될 수도 있습니다.

+0

안녕하세요, 정교한 답변에 감사드립니다. 방금 프로젝트에 등록되었습니다. 그래서 코드를 컴파일하기 위해 typedef를 사용해야합니까? –

1

uint32_t와 친구가 C99 표준에 정의 종류이 줄 오류가. 그들은 G ++에서 지원하지만 MSVC++는 지원하지 않습니다 (C++ 컴파일러로 지원할 의무는 없습니다).

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

, e.t.c. : 당신은 같은 부호 __int32로 MS-특정 유형의 형식 정의를 할 수 있습니다

관련 문제