在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上创建一个帐户,并在那里发布任何问题。它可能有帮助。
答
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.
嘿,谢谢你的精心解答,刚刚注册你的项目。 那么你应该如何使用typedefs来编译代码呢? – 2009-07-21 15:59:22