私は数年間 C++ を扱っていませんでしたが、今では C++ プロジェクトを維持する必要があります。あるプロジェクトではコンパイルできるが、他のプロジェクトではコンパイルできないように見える次のコードがあります。
list.h
#include "mytype.h"
#include <set>
typedef std::set<MYTYPE> MYTYPE_LIST;
typedef MYTYPE_LIST::iterator MYTYPE_LIST_ITERATOR;
class LIST {
[...]
MYTYPE_LIST list;
};
リスト.cpp
void
LIST::somemethod(MYTYPE* requester)
{
MYTYPE_LIST_ITERATOR it;
for (it = list.begin(); it != list.end() ; it++ )
{
MYTYPE& info = (*it); // Error on this line
[...]
}
}
プロジェクトを VS 2010 でコンパイルしていますが、マークされた行で次のエラーが発生します。
error C2440: 'initializing' : cannot convert from 'const MYTYPE' to 'MYTYPE &'
IntelliSense: qualifiers dropped in binding reference of type "MYTYPE &" to initializer of type "const MYTYPE"
私はこれらのエラーをグーグルで検索しましたが、私が理解している限り、(*it) は const であってはなりません ('it' は ::const_iterator ではないため、こちらを参照してください)。そのため、参照変数に割り当てることができるはずです。 .