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

最佳答案

我收到一个类似的错误:“调用'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的读取操作,例如

#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>吗?

10-07 16:09
查看更多