【问题标题】:error: no match for ‘operator=’ (operand types are ‘FILE and ‘FILE* )错误:'operator=' 不匹配(操作数类型为'FILE 和'FILE* )
【发布时间】:2015-11-26 05:43:26
【问题描述】:

我正在尝试通过引用传递来获取文件指针。 我有一个 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;

谁能告诉我我做错了什么?

【问题讨论】:

    标签: c++ linux file


    【解决方案1】:

    这是没救了:void openfile(FILE &fileFP)

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

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

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

    但是只使用返回值会更简单:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2023-04-07
      • 1970-01-01
      • 2019-09-05
      • 2019-04-08
      • 2020-09-07
      相关资源
      最近更新 更多