خطأ C2679:الثنائي '>>' :لم يتم العثور على عامل تشغيل يأخذ المعامل الأيمن من النوع "std::string" (أو لا يوجد تحويل مقبول)
-
06-07-2019 - |
سؤال
من فضلك لا تخلط بين العنوان لأنه تم طرحه بالفعل من قبل شخص ما ولكن لسياق مختلف
لا يتم تجميع التعليمات البرمجية أدناه في 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، لذلك إذا كنت تخطط لتوطين برنامجك، فأنا أنصحك بعدم القيام بذلك.