嘿,我想将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;
}
答案 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>
吗?