خطأ C2679:الثنائي '>>' :لم يتم العثور على عامل تشغيل يأخذ المعامل الأيمن من النوع "std::string" (أو لا يوجد تحويل مقبول)

StackOverflow https://stackoverflow.com/questions/1631338

سؤال

من فضلك لا تخلط بين العنوان لأنه تم طرحه بالفعل من قبل شخص ما ولكن لسياق مختلف

لا يتم تجميع التعليمات البرمجية أدناه في Visual C++ Compiler (VS2008)، بل إنها تطرح هذا الاستثناء:

std::ifstream input (fileName);   

while (input) {
  string s;
  input >> s;
  std::cout << s << std::endl;
};

لكن هذا الكود يتم تجميعه بشكل جيد في cygwin g++.أي أفكار؟

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

المحلول

هل قمت بتضمين جميع الرؤوس التالية؟

  • <fstream>
  • <istream>
  • <iostream>
  • <string>

تخميني هو أنك نسيت <string>.

في ملحوظة جانبية:التي ينبغي أن تكون std::cout و std::endl.

نصائح أخرى

اضافة الى @sbi الإجابة، في حالتي كان الفرق بما في ذلك <string> بدلاً من <string.h> (تحت VS 2017).

انظر الرد التالي: إجابة حالة مماثلة

include <string>

حاول تضمين ملف رأس السلسلة مع <iostream> ملف.سيعمل في بعض المترجمين حتى بدون <string> نظرًا لاختلاف إعدادات المترجمين المختلفين والمترجم هو المسؤول عن قراءة ملفات المعالج المسبق التي تبدأ بالرمز "#" لإنشاء ملف obj.

بالإضافة إلى ما قاله الآخرون.كان الكود التالي ضروريًا في طلبي للتجميع بنجاح.

std::cout << s.c_str() << std::endl;

الحل البديل الآخر هو الانتقال إلى خصائص المشروع -> عام -> مجموعة الأحرف واختيار "Ues Multi-Byte Character Set" (لن تحتاج إلى استخدام c_str() لإخراج السلسلة)

هناك عيوب في استخدام MBCS، لذلك إذا كنت تخطط لتوطين برنامجك، فأنا أنصحك بعدم القيام بذلك.

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