Я не могу получить поток строк для компиляции - PullRequest
0 голосов
/ 25 мая 2019

Я пишу симуляционную программу на C ++.У меня есть несколько лет опыта в программировании, но я ничего не делал за 15 лет.Это мой первый раз программирование на C ++.Симуляция содержит несколько сотен строк кода и работает нормально.

Моя основная цель - результаты симуляции.Я сейчас на пенсии, так что приобретение опыта в C ++ не является моей главной целью, хотя все еще представляет интерес.

Я хочу отформатировать выходные результаты моделирования в: консольный вывод, который я могу прочитать

CSVвывод, который я могу передать через Excel или эквивалентный

Мой план - это одна подпрограмма, которая может печатать оба формата.

Из долгого изучения потока строк на переполнение стека и YouTube Я все еще застрял на первом месте.У меня есть две проблемы:

1: stringstream.str () не будет компилироваться

2: вызов fprintf не хочет распознавать строку

Яиспользуя NetBeans 8.1 (стандартный компилятор), Zorin Linux.Это мой первый опыт разработки на обеих этих платформах.Я мог бы написать код, чтобы сделать это сам, но я не могу быть первым, кто захочет сделать это.Вот пример кода был скопирован из ответов и "как" в Интернете

вот соответствующие фрагменты кода:

#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 Ответ

1 голос
/ 25 мая 2019

Вы должны использовать 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» не является сообщением от компилятора.Это из среды IDE NetBeans.Вот возможное решение NetBeans не может разрешить идентификатор c_str .

PS.В C ++ имя правильного заголовочного файла - <cstdio>.Это определяется реализацией, если можно использовать stdio.h.

...