从 C++ 调用 C 函数,出现“无匹配函数”错误

问题描述 投票:0回答:1

我定义了以下头文件(用 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);
}

当我尝试在 Eclipse 中编译此(C++)项目时,我收到与以下内容相关的“无匹配函数调用...”错误:

return setDataSource(&pFormatCtx, srcUrl);

如果我注释掉该调用,代码可以正常编译:

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

这似乎是一个链接问题,有人知道我做错了什么吗?

c++ c
1个回答
15
投票
在该上下文中,

setDataSource
是成员函数的名称。要调用 free 函数,请尝试完全限定其名称:

return ::setDataSource(&pFormatCtx, srcUrl);
//     ^^
© www.soinside.com 2019 - 2024. All rights reserved.