2013-03-15 110 views
4

我定義下面的頭文件(在C)中,留出了功能的實現,因爲thise不需要:調用從C++ C函數,「不匹配函數」錯誤

#ifndef FFMPEG_MEDIAMETADATARETRIEVER_H_ 
#define FFMPEG_MEDIAMETADATARETRIEVER_H_ 

#include <libavcodec/avcodec.h> 
#include <libavformat/avformat.h> 
#include <libavutil/dict.h> 

int setDataSource(AVFormatContext** pFormatCtx, const char* path); 

#endif /*FFMPEG_MEDIAMETADATARETRIEVER_H_*/ 

在C++中中,我定義我的第二報頭的文件:

#ifndef MEDIAMETADATARETRIEVER_H 
#define MEDIAMETADATARETRIEVER_H 

using namespace std; 

extern "C" { 
    #include "ffmpeg_mediametadataretriever.h" 
} 

class MediaMetadataRetriever 
{ 
public: 
    MediaMetadataRetriever(); 
    ~MediaMetadataRetriever(); 
    int setDataSource(const char* dataSourceUrl); 
}; 

#endif // MEDIAMETADATARETRIEVER_H 

在,mediametadataretriever.cpp我定義下面的函數:

int MediaMetadataRetriever::setDataSource(
    const char *srcUrl) 
{ 
    // should call C function 
    AVFormatContext* pFormatCtx; 
    return setDataSource(&pFormatCtx, srcUrl); 
} 

W¯¯母雞我嘗試編譯在Eclipse這個(C++)項目中,我得到一個「沒有匹配函數的調用...」相關的錯誤:

return setDataSource(&pFormatCtx, srcUrl); 

如果我註釋掉調用,代碼編譯好:

int MediaMetadataRetriever::setDataSource(
    const char *srcUrl) 
{ 
    return 0; 
} 

這似乎是一個鏈接的問題,沒有人知道我在做什麼錯?

回答

14

在這方面setDataSource是成員函數的名稱。要調用免費功能,請嘗試完全限定其名稱:

return ::setDataSource(&pFormatCtx, srcUrl); 
//  ^^ 
+0

@WilliamSeemann:好的,很高興它幫助:) – 2013-03-15 20:05:26