如何在C ++中修复“没有匹配的函数要调用...”?

时间:2019-05-20 15:20:23

标签: c++ arrays file binary

嘿,我想将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;
}

1 个答案:

答案 0 :(得分:2)

  

我收到类似以下错误:“调用'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(array,length); //此行中的错误

这是正常现象,因为没有理由 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<int>吗?