错误:'operator ='不匹配(操作数类型为'FILE和'FILE *)

时间:2015-11-26 05:43:27

标签: c++ linux file

我试图通过引用传递来获取文件指针。 我有一个fileInterface用于模拟单元测试的代码。

实际实施的功能定义:

void openfile(FILE &fileFP)
{
    FILE *openedfileFP=setmntent(m_filename, m_mode);
    fileFP= openedfileFP;
}

UT的功能定义:

FILE *m_fileFP;
void setfileFP(FILE * fileFP1)
{
    m_fileFP=fileFP1;
}
void openfile(FILE &fileFP)
{
    fileFP= *m_fileFP;
}

功能调用:

FILE *getFd = NULL;
TestFd=fopen(path,mode);
fileInterface->setfileFP(TestFd);
fileInterface->openfilegetFd(getFd);

编译时出现以下错误:

no match for ‘operator=’ (operand types are ‘FILE {aka _IO_FILE}’ and ‘FILE* {aka _IO_FILE*}’)
         fileFP= openedfileFP;

有人可以让我知道我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

这是绝望的:void openfile(FILE &fileFP)

FILE是一个opaque类型,因此甚至可能无法编译。这取决于您的编译器的库实现。即使它确实编译了,你也无法用它做任何有用的事情。

您要做的是通过引用传递FILE *

void openfile(FILE * &fileFP)
{
    FILE *openedfileFP=setmntent(m_filename, m_mode);
    fileFP= openedfileFP;
}

然而,只使用返回值会更简单:

FILE *openfile()
{
    return setmntent(m_filename, m_mode);
}