سؤال

وأنا حاليا باستخدام std::ofstream كما يلي:

std::ofstream outFile;
outFile.open(output_file);

وبعد ذلك أحاول تمرير كائن std::stringstream إلى outFile كما يلي:

GetHolesResults(..., std::ofstream &outFile){
  float x = 1234;
  std::stringstream ss;
  ss << x << std::endl;
  outFile << ss;
}

والآن لي outFile يحتوي على أي شيء ولكن القمامة: "0012E708" المتكررة في جميع أنحاء

.

في GetHolesResults أستطيع أن أكتب

outFile << "Foo" << std:endl; 

ووسيتم إخراج بشكل صحيح في outFile.

وأي اقتراح بشأن ما أفعله خطأ؟

هل كانت مفيدة؟

المحلول

ويمكنك القيام بذلك، والتي لا تحتاج إلى إنشاء سلسلة. فهو يجعل دفق إخراج قرأ محتويات تيار على الجانب الأيمن (قابلة للاستخدام مع أي تيارات).

outFile << ss.rdbuf();

نصائح أخرى

إذا كنت تستخدم std::ostringstream ويتساءل لماذا لا شيء يحصل مكتوبة مع ss.rdbuf() ثم استخدام وظيفة .str().

outFile << oStream.str();

عند تمرير rdbuf stringstream إلى أسطر جديدة لساحة لا تترجم. يمكن أن تحتوي على نص الإدخال \n تجد حتى استبدال لن ينجح. كتب القانون القديم إلى fstream والتحول إلى لخسائر stringstream ترجمة ENDL.

فما استقاموا لكم فاستقيموا بدلا إرسال ss.str(); بدلا من ss.rdbuf(); (واستخدام stringstream).

إذا كنت تستخدم ss.rdbuf() على الشكل أعلام outFile سيتم إعادة تقديم التعليمات البرمجية غير قابلة لإعادة الاستخدام. أي المتصل من GetHolesResults(..., std::ofstream &outFile) قد ترغب في إرسال شيء من هذا القبيل لعرض النتيجة في جدول:

outFile << std::setw(12) << GetHolesResults ...

... ونتساءل لماذا يتم تجاهل العرض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top