[решено] странное поведение switch
strcpy(cSuit,"Tr");пишет 3 байта в 2-х байтный массив, и, вероятно, затирает iValue нулем.
спасибо! Дело именно в этом. Забыл, что строки заканчиваются на '\0'
template <typename T, typename U>
class CreateMap
{
private:
std::map<T, U> m;
public:
CreateMap(const T& key, const U& val);
CreateMap<T, U>& operatorconst T& key, const U& val);
operator std::map<T, U>
};
template <typename T, typename U>
CreateMap<T,U>::CreateMap(const T& key, const U& val)
{
m[key] = val;
}
template <typename T, typename U>
CreateMap<T, U>& CreateMap<T,U>::operatorconst T& key, const U& val)
{
m[key] = val;
return *this;
}
template <typename T, typename U>
CreateMap<T,U>::operator std::map<T, U>
{
return m;
}
использование:
std::map<int, std::string> intToSuitMap = CreateMap<int,std::string>(0, "Ch") (1,"Bu") (2, "Pi") (3, "Tr");
std::map<std::string, int> suitToIntMap = CreateMap<std::string, int>("Ch", 0) ("Bu", 1) ("Pi", 2) ("Tr", 3);
.....
int iSuit = 42;
assertiSuit>=0) && (iSuit<=3;
std::string cSuit = intToSuitMap[iSuit];
и обратно:
iSuit = suitToIntMap[cSuit];
попробуй использовать std::map вместо этого свича, удобно с вот таким шаблоном:Почему сразу не советуешь на Ruby или Perl писать?
потому что при помощи доброго слова и темплейта из c++ можно сделать руби и перл
зачем?
да, одна очепяточка в инициализации и превед
при помощи доброго слова и темплейта из c++ можно сделать руби и перлСвят, свят
Оставить комментарий
marina7573
Написал простенький код, который сопоставляет номеру от 0 до 35 строку, содержащую название этой карты.В результате код правильно распознаёт масть, но неправильно распознаёт значение карты:
Собственно, втф? Почему свитч работает как-то не так?