我基本上是这样写的: -
void function(fstream& f[], int m){
// using fstream objects
}
int main()
{
int m = 4;
fstream f[m];
f[0].open("f0.txt");
f[1].open("f1.txt");
f[2].open("f2.txt");
f[3].open("f3.txt");
function(f, m);
return 0;
}
以下是错误: -
error: declaration of ‘f’ as array of references|
error: expected ‘)’ before ‘,’ token|
error: expected unqualified-id before ‘int’|
所有这些错误都在行
void function(fstream& f[], int m){
如果我只是初始化函数内部的fstream数组,那么错误就会消失。如果我在main函数中初始化它们,我该怎么做才能删除错误?
答案 0 :(得分:1)
主要问题是您尝试将指针传递给引用,而不是数组。要解决这个问题,你应该传递一个真正的指针window.stop();
var xhr = new XMLHttpRequest();
xhr.open('GET', window.location.href, true);
xhr.onload = function () {
var htmlcode = this.responseText;
... modify htmlcode ...
document.open();
document.write(htmlcode);
document.close();
}
xhr.send();
或(更好)使用:: std :: array代替:
fstream *
或者,如果事先不知道项目数量,您可能希望使用using t_FileStreams = ::std::array<::std::fstream, 4>;
void sort(t_FileStreams & streams){
// using fstream objects
}
int main()
{
t_FileStreams f;
f[0].open("f0.txt");
f[1].open("f1.txt");
f[2].open("f2.txt");
f[3].open("f3.txt");
sort(f);
return 0;
}
。另请注意,代码std::vector<::std::fstream>
在C ++中是不合法的,因为数组大小必须是编译时已知的常量。
答案 1 :(得分:0)
考虑使用一些标准container,可能是std::vector
或std::array
。
了解rule of five。
使用std::sort
。您可以将lambda expression传递给它,给出比较标准。
您无法轻易比较std::fstream
- s,因为他们不会保留file path。在您提供fstream
(open
或construction时间)的路径后,该路径将丢失。你需要自己明确 。
如果您想通过其他一些标准(例如其内容)来比较文件,那么您可以更好地memoize该标准(例如,将其内容保存在某些单独的数据中)。任何排序函数都需要比较元素几个次(因为排序复杂性至少 O(n log n)....),所以在比较中做IO功能不合理。同样,如果您想通过某些元数据(例如它们的大小和/或创建时间)来比较文件,那么最好在排序之前检索一次元数据(例如在Linux上使用stat(2))。
也许你想要定义自己的class
或struct
,它会将std::string
和smart pointer(例如某些std::unique_ptr
)保留给某些std::fstream
1}}。
然后,您将通过引用或const
引用,将此类对象的容器传递给您的函数。
在编码前花几天时间阅读good book on C++ programming。
请注意,IO操作通常为very slow。它们可能每个持续几毫秒(而大多数CPU操作只需要几纳秒)。因此,在传递给某种排序函数的比较代码中执行IO通常是不合理的。
答案 2 :(得分:0)
要将任意大小的数组传递给函数,您可以使用数组引用(声明为Type(&Identifier)[Size]
)和类似的模板。
#include <cstddef>
template<std::size_t N>
void sort(std::ifstream(&ins)[N]) { /* implementation */ }
N
是数组ins
的大小,可以在sort
的函数体中使用,就像它是一个普通参数一样。
如果阵列只是一个尺寸,你可以不用模板。
void sort(std::ifstream(&ins)[4]) { /* implementation */ }
这也适用于std::array
。
#include <array>
#include <cstddef>
template<std::size_t N>
void sort(std::array<std::ifstream, N> &ins) { /* implementation */ }