我试图通过引用传递来获取文件指针。
我有一个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;
有人可以让我知道我做错了什么吗?
答案 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);
}