我无法编译stringstream

时间:2019-05-25 10:57:30

标签: c++ netbeans stringstream

我正在用C ++编写一个仿真程序。我有几年的编程经验,但15年没有做任何事情。这是我第一次用C ++编程。该仿真包含数百行代码,并且可以正常运行。

我的主要目标是仿真结果。我现在退休了,因此尽管仍然很感兴趣,但是获得c ++专业知识并不是我的主要目标。

我想将模拟的输出结果格式化为: 控制台输出我可以阅读

我可以通过Excel或同等功能输入的CSV输出

我的计划是可以打印两种格式的例程。

从长时间检查堆栈溢出的字符串流和youtube Im仍然停留在平方一开始。 升 我有两个问题:

1:stringstream.str()无法编译

2:调用fprintf不想识别字符串

我正在使用Netrins 8.1(标准编译器),zorin linux。这是我在这两个平台上进行开发的第一次经验。我可以自己编写代码来执行此操作,但是我不能成为第一个想要执行此操作的人。如下示例代码在互联网上复制了答案和“ howto”

以下是相关的代码段:

#include <stdio.h>
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include "globals.h"
#include "bjClass.h"

using namespace std;

extern FILE * resultsFile;

void print_disk_file(int outstream ) 
{
  std::ostringstream s1;
  int i = 22;
  s1 << "Hello " << i << endl;
  string s2 = s1.str();         // compiler says "unable to resolve str"
  cout << s2;

  // ...

  ostringstream os;
  os << "dec: " << 15 << " hex: " << std::hex << 15 << endl;
  cout << os.str() << endl;

  fprintf(resultsFile, "%s %c" , s1.str(), ' ') ;  // compiler says "unable to resolve str" and gives warning about strings and char *
  fprintf(resultsFile, "%s %c" , s2, ' ') ;
}

1 个答案:

答案 0 :(得分:1)

您必须使用basic_string的data()c_str()方法来获取指向基础数据的指针。

https://en.cppreference.com/w/cpp/string/basic_string

即:

fprintf(resultsFile, "%s %c" , s1.str().c_str(), ' ') ;  
fprintf(resultsFile, "%s %c" , s2.c_str(), ' ') ;

当然,直接操作std::string数据并不安全。 c_str()返回指向常量缓冲区的指针,该缓冲区可用于输出例程。

您给出的错误消息很奇怪。

“无法解析str”不是来自copiler的消息。这些来自NetBeans IDE。这是可能的解决方案netbeans unable to resolve identifier c_str

PS。在C ++中,正确的头文件名为<cstdio>。如果可以改用stdio.h,则由实现定义。