Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 流的初始值设定项列表(C+;+;11)_C++11_Ofstream_Initializer List - Fatal编程技术网

C++11 流的初始值设定项列表(C+;+;11)

C++11 流的初始值设定项列表(C+;+;11),c++11,ofstream,initializer-list,C++11,Ofstream,Initializer List,我试图将可变数量的流传递给一个函数,该函数接受一个初始值设定项列表,但似乎不起作用,并从初始值设定项列表结构中抛出所有可能的错误,并且关于我的函数如何使用一个流数组无法与任何定义的函数匹配 是否真的可以在初始值设定项列表中传递流的引用 test.cpp 分机.h #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 无效写入方法(初始值设定项\列表参数); extension.cpp #包括“extension.h” 无效写入方法(初始值设定项\列表参数){ 用

我试图将可变数量的流传递给一个函数,该函数接受一个初始值设定项列表,但似乎不起作用,并从初始值设定项列表结构中抛出所有可能的错误,并且关于我的函数如何使用一个流数组无法与任何定义的函数匹配

是否真的可以在初始值设定项列表中传递流的引用

test.cpp

分机.h

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
无效写入方法(初始值设定项\列表参数);
extension.cpp

#包括“extension.h”
无效写入方法(初始值设定项\列表参数){
用于(自动f:args){
fclang3.4(trunk194324)产生了一条非常清晰的错误消息:

初始值设定项列表:54:23:错误:“迭代器”声明为指向 类型的引用
'std::基本流&

typedef const\u E*迭代器;

因此不,这是不可能的。另请参见

(由于某些内部编译器错误,gcc 4.7.2和4.8.1在此代码上崩溃。我已提交了一个。)

您可以做的是传递一个指针而不是引用,如下所示:

#include <fstream>
#include <initializer_list>

using namespace std;

void writeSomething(initializer_list<ofstream*> args) {
    for (auto f : args )
        *f << "hello" << endl;
}

int main() {
    ofstream outputFile("data_1.txt");
    ofstream outputFile2("data_2.txt");
    writeSomething({&outputFile, &outputFile2});
}
#包括
#包括
使用名称空间std;
无效写入方法(初始值设定项\列表参数){
用于(自动f:args)

*f你能发布你的代码吗?fstreams是不可复制的,初始化列表只允许你复制它们的内容。因此它是否有效取决于你如何填充初始化列表以及函数对它做了什么。请发布一个
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <iostream>
#include <fstream>
#include <unistd.h>
#include <string.h>
#include <initializer_list>

using namespace std;

void writeSomething(initializer_list<ofstream&> args);
#include "extension.h"

void writeSomething(initializer_list<ofstream&> args) {
    for (auto f : args ) {
        f << "hello" << endl;
    }
}
#include <fstream>
#include <initializer_list>

using namespace std;

void writeSomething(initializer_list<ofstream*> args) {
    for (auto f : args )
        *f << "hello" << endl;
}

int main() {
    ofstream outputFile("data_1.txt");
    ofstream outputFile2("data_2.txt");
    writeSomething({&outputFile, &outputFile2});
}