0

我是初学者,所以如果问题很明显,请理解。

当前版本的代码如下所示。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’

你能建议任何补救措施吗?

4

3 回答 3

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  ">>"
}
于 2013-08-07T16:18:04.360 回答
1

你的问题是popen只提供了一个FILE *,我不相信有任何(便携的,可靠的)方法可以将它转换为文件流。因此,您将不得不处理 usingfgets将一行读取为 C 字符串并将stringstream其转换为您的类型,或者 usingfscanf或类似的。

于 2013-08-07T16:11:51.903 回答
0

fFILE没有>>运算符的类型。您需要使用fread()和之类的东西fwrite()。你也没有得到 ifstream 提供给你的所有花哨的类型转换,如果你要使用FILE你基本上必须直接以位读取和写入。

fread(&inputout, sizeof(Coll), 1, f);

这是从当前文件位置读取内存并将其放入inputoutColl x 1 大小的变量中。

于 2013-08-07T16:10:57.297 回答