我是初学者,所以如果问题显而易见,请继续说明。
当前版本的代码如下所示。 output.txt使用ifstream打开,然后送到Coll类型的对象,因为它理解“理解”生成的output.txt文件的格式。
std::system("./Pogram > output.txt");
Coll inputout;
ifstream ifsout("output.txt");
ifsout >> inputout;
我的目标是摆脱中间的output.txt并执行如下所示的操作。
FILE * f = popen("./Program", "r");
Coll inputout;
f >> inputout;
这会产生以下错误:
error: no match for ‘operator>>’ in ‘f >> inputout’
你能否提出任何补救措施?
答案 0 :(得分:1)
您的问题是popen
仅提供FILE *
,我不相信有任何(便携,可靠)方式将其转换为文件流。因此,您必须处理使用fgets
将行读取为C字符串并使用stringstream
将其转换为您的类型,或使用fscanf
或类似字符串。
答案 1 :(得分:1)
这可能适用于pstream:
#include <pstream.h>
#include <string>
#include <iterator>
int main()
{
redi::ipstream proc("./Program");
typedef std::istreambuf_iterator<char> it;
std::string output(it(proc.rdbuf()), it());
Coll inputout;
output>>inputout; // You might have overloaded ">>"
}
答案 2 :(得分:0)
f
属于FILE
类型,没有>>
运算符。您需要使用fread()
和fwrite()
之类的内容。你也没有获得ifstream借给你的所有奇特类型的转换,如果你要使用FILE
,你基本上必须直接读取和写入。
fread(&inputout, sizeof(Coll), 1, f);
这是从当前文件位置读取内存并将其放入变量inputout
,其大小为Coll x 1。