2013-08-03 101 views
1

我的項目中有很多.cpp文件可以工作。但是這個刺激Xcode或編譯器。爲什麼Xcode不能識別這個.cpp文件中的free()和malloc()?

它不承認free()malloc()但這也是C.什麼可能是錯誤的?

free

malloc

頁眉ssdpmessage.h看起來是這樣的:

#ifndef _SSDPMESSAGE_H 
#define _SSDPMESSAGE_H 

#include "ssdptools.h" 
#include <vector> 
#include <arpa/inet.h> 
#include "ssdpdb.h" 

class SSDPMessage{ 
public: 
    SSDPMessage(); 
    virtual ~SSDPMessage(); 
    //What type of message can we handle 
    virtual SSDP_TYPE GetType()=0; 
    //Get the message dignature implemented in this class 
    virtual std::vector<SSDP_HTTP_HEADER*> GetHeaderSignature(); 
    //Can this class parse the message with this signature ? 
    virtual u8 CanProcess(std::vector<SSDP_HTTP_HEADER*> msgheaders); 
    //Process the message, return value: 
    //0 : processed 
    //1 : not for me, search for another to process 
    //<0 : message was for me but there is an error 
    virtual int Process(struct sockaddr* sender, std::vector<SSDP_HTTP_HEADER*> msgheaders)=0; 
    //ReInit all members 
    virtual void ReInit()=0; 
    virtual SSDPDB* GetDB(); 
    virtual void SetDB(SSDPDB* db); 
private: 
    std::vector<SSDP_HTTP_HEADER*> mHeaderSignature; 
protected: 
    int AddSignatureHeader(char* fieldname, char* fieldvalue); 
    SSDPDB *mDB; 
private: 
    SSDPMessage(const SSDPMessage &src); 
    SSDPMessage& operator= (const SSDPMessage &src);    
}; 


#endif //_SSDPMESSAGE_H 

的包括和ssdpmessage.cpp看起來像這樣受影響的代碼:

#include "ssdpmessage.h" 

SSDPMessage::SSDPMessage():mDB(NULL){ 
} 

SSDPMessage::~SSDPMessage(){ 
    std::vector<SSDP_HTTP_HEADER*>::iterator it; 
    for(it=mHeaderSignature.begin(); it<mHeaderSignature.end(); it++){ 
     free(*it); 
    } 
    mHeaderSignature.clear(); 
} 



int SSDPMessage::AddSignatureHeader(char* fieldname, char* fieldvalue){ 
    SSDP_HTTP_HEADER *thisHeader = (SSDP_HTTP_HEADER*)malloc(sizeof(SSDP_HTTP_HEADER)); 
    thisHeader->fieldname = (u8*)fieldname; 
    thisHeader->fieldnamelen = strlen(fieldname); 
    thisHeader->fieldvalue = (u8*)fieldvalue; 
    thisHeader->fieldvaluelen = strlen(fieldvalue); 
    mHeaderSignature.push_back(thisHeader);   
    return mHeaderSignature.size(); 
} 

這是代碼來自 upnpx庫。它在圖書館的演示項目中沒有問題。

+1

需要正確的包含文件 - 我總是'#include '當我使用'malloc'時,但我是一個C人;不確定C++需要什麼。 – Floris

+0

是否包含'stdlib.h' ..? – Rapptz

回答

2

malloc要求您包括cstdlib

+1

澄清一下,它在演示項目中的原因是因爲包含鏈的更多內容已經包含'cstdlib'。 –

相關問題