Дело в том, что я не (зная, пытаясь использовать любой конструктор по умолчанию beatle::beatle
, ошибка:
1> ecosystem.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\map(172): error C2512: 'beatle::beatle' : no appropriate default constructor available
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\map(165) : while compiling class template member function 'beatle &std::map<_Kty,_Ty>::operator [](int &&)'
1> with
1> [
1> _Kty=tokenID,
1> _Ty=beatle
1> ]
1> c:\users\zak\documents\visual studio 2010\projects\ascii_sivvure\ascii_sivvure\ecosystem.h(22) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled
1> with
1> [
1> _Kty=tokenID,
1> _Ty=beatle
1> ]
Код с несущественными вещами убран:
заголовок:
typedef std::map<tokenID,beatle> Beatles;
class ecosystem
{
private:
line 22: Beatles m_Beatles;
};
source:
ecosystem::ecosystem(): m_output( output() )
{
Beatles m_Beatles;
}
void ecosystem::populate()
{
if (m_isMatingSeason && ( random(0,1000) < rateMATING ) )
{
beatle babyBeatle = breed();
m_Beatles[babyBeatle.getTokenID()] = babyBeatle;
m_field.occupy(babyBeatle.getTokenID(), babyBeatle.getLocation() );
}
}
Я часами пытался использовать разные комбинации, пытаясь правильно определить / объявить maps
. В какой-то момент intellisense начал говорить, что ему нужны указателивозразить здесь:
m_Beatles[babyBeatle.getTokenID()] = babyBeatle;
и это привело меня к печальному пути.
Все это происходит после моего первого (и, надеюсь, последнего) разгула рефакторинга, с тех пор как я провел более неделиЯ смог скомпилировать ... У меня, вероятно, есть 40 часов, чтобы снова попытаться заставить его работать.