嘿,我想将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>
吗?