我无法让字符串流编译

I cant get stringstream to compile

本文关键字:编译 字符串      更新时间:2023-10-16

我正在用C++编写一个模拟程序。我有几年的编程经验,但 15 年来根本没有做过任何编程经验。这是我第一次用C++编程。模拟包含数百行代码,工作正常。

我的主要目标是模拟结果。我现在退休了,所以获得 c++ 专业知识并不是我的主要目标,尽管仍然感兴趣。

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

我可以通过Excel或等效项输入CSV输出

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

从堆栈溢出和 youtube 上的字符串流的长期检查中,我仍然停留在原点。 l 我有两个问题:

1: stringstream.str() 不会编译

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

我正在使用netbeans 8.1(标准编译器),zorin linux。这是我第一次在这两个平台上进行开发。我可以自己编写代码来做这件事,但我不能成为第一个想要做这件事的人。FWIW 示例代码是在互联网上复制答案和"操作方法"的

以下是相关的代码片段:

#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, ' ') ;
}

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

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 无法解析标识符c_str的可能解决方案。

附言。在C++正确的头文件名是<cstdio>。它是实现定义的,如果可以使用stdio.h的话。