خطأ تجميع سخيف باستخدام القوائم / التكرار (C ++)

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

  •  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      (!!!)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top