【问题标题】:How to fix "no matching function to call to..." in C++?如何在 C++ 中修复“没有匹配的函数来调用...”?
【发布时间】:2019-10-06 23:55:19
【问题描述】:

嘿,我想将我的 wav 文件的二进制数据加载到我的数组中,但我收到一个错误,例如:“不匹配调用 'std::basic_ifstream(Array&, size_t&)' 的函数”,我想这样做使用模板,有谁知道如何解决这个问题?

int main(){


    ifstream infile("soundeffect.wav", std::ios::binary);

    infile.seekg(0, infile.end);
    size_t length = infile.tellg();
    infile.seekg(44, infile.beg);

    Array<int> array(length);


    infile.read(array, length); //error in this line

     return 0;
}

【问题讨论】:

  • 什么是Array?它不是一个标准的类。
  • 查看read的第一个参数是什么,然后将您的对象转换为该类型。
  • 请正确发布minimal reproducible exampleArray&lt;int&gt; 是什么?没有std::basic_ifstream(Array&amp;, size_t&amp;)函数,所以错误是正确的。
  • 你在main之前放了吗:using namepace std;
  • 您忘记了错误消息中编译器告诉您哪些调用 有效并解释了为什么您的调用与其中任何一个都不匹配的部分。找到你想要的,看看编译器是怎么说的。

标签: c++ arrays file binary


【解决方案1】:

我收到如下错误:“调用 'std::basic_ifstream(Array&, size_t&)' 的函数不匹配”

Array 是我写的一个类,是的,我输入了'using namepace std;'

如果我理解你有类似的东西:

#include <fstream>

using namespace std;

template<typename K>
class Array {
  public:
    Array(size_t ln) { /*...*/ }
  // ...
};

int main(){
  ifstream infile("soundeffect.wav", std::ios::binary);

  infile.seekg(0, infile.end);
  size_t length = infile.tellg();
  infile.seekg(44, infile.beg);

  Array<int> array(length);

  infile.read(array, length); //error in this line

  return 0;
}

当我编译时我也有

c.cc:在函数“int main()”中: c.cc:21:28: 错误:没有匹配函数调用‘std::basic_ifstream::read(Array&, size_t&)’ infile.read(数组,长度); //这一行出错

这很正常,因为 ifstream::read 没有理由知道如何读取 Array

一种方法是在 Array 上定义操作 read,例如

#include <fstream>

using namespace std;

template<typename K>
class Array {
  public:
    Array(size_t ln) : len(ln) { /* ... */ }
    istream & read(istream & in, size_t & len);
    // ...
  private:
    size_t len;
  // ...
};      

// ln is an input-output var allowing to know how much elements
// was read, returns the istream to know if an error occurs
// and which one
template<typename K>
istream & Array<K>::read(istream & in, size_t & ln) {
  size_t n = min(ln, len);

  for (ln = 0; ln != n; ++ln)
    if (! in.read(??, ??))
      break;

  return in;
}

int main(){
  ifstream infile("soundeffect.wav", std::ios::binary);

  infile.seekg(0, infile.end);
  size_t length = infile.tellg();
  infile.seekg(44, infile.beg);

  Array<int> array(length);

  array.read(infile, length);

  return 0;
}

但是你确定你可以定义一个通用类 Array 允许将 wav 文件读入Array&lt;int&gt; 吗?

【讨论】:

  • 谢谢你真的很有帮助!我想我必须将其更改为 Array
  • @newlearner 欢迎您,是的,char 可能更合适,但是您确定需要为此定义类数组吗?
  • 这是我自己写的课的要求,所以我猜是的:)
猜你喜欢
  • 2019-10-09
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2016-11-23
  • 2012-05-27
相关资源
最近更新 更多