خطأ تجميع سخيف باستخدام القوائم / التكرار (C ++)
-
06-07-2019 - |
سؤال
ما يلي لا يجمع ، ولا يمكنني لحياة لي أن أرى لماذا!
#include <list>
using namespace std;
list<char> myList;
list<int>::iterator it;
it = myList.begin();
الخطأ:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::list<_Ty>::_Iterator<_Secure_validation>' (or there is no acceptable conversion)
المحلول
هذا يحدث لأن list<char> and list<int>
وهما فئتان مختلفتان. لذا فإن تكرارهم أنواع مختلفة أيضًا.
إذا نظرت إلى رمز فئة STD :: القائمة ، فسترى شيئًا مثل:
typedef _Iterator<_SECURE_VALIDATION_DEFAULT> iterator;
أو
typedef _Iterator<bla_bla_bla> iterator;
هذا يعني أن النوع الجديد محدد بواسطة كل قائمة فئة متميزة. وبعبارة أخرى ، تحدد كل قائمة نوع التكرار الخاص بها.
قم بتغيير الرمز الخاص بك إلى هذا:
list<char>::iterator it;
نصائح أخرى
لأن نوع التكرار مختلف:
list<char> myList; // char
list<int>::iterator it; // int
احذر من أن نوع القائمة أو أي حاوية أخرى ليس فقط قالب يكتب معامل, ، ولكن جميع المعلمات القالب الأخرى كذلك. فمثلا:
list<char, MyAllocator> mylist;
list<char, YourAllocator> yourlist;
// typeof mylist != type of yourlist (!!!)
لا تنتمي إلى StackOverflow