Пытаясь сохранить простоту, я определяю некоторые карты базовой пары следующим образом:
int main(int argc, char * argv[])
{
std::string s1;
s1 = argv[1]; //<-- copy argument to a string type to use string iterator
std::vector<int> args_vector;
for (char c : s1)
{
args_vector.push_back(static_cast<int>(c - 48)); // convert char to integer and save it in vector
}
for (int i : args_vector)
{
typedef std::map<string, int> BasePairMap;
BasePairMap m;
m["0"] = 48;
m["1"] = 49;
m["2"] = 50;
m["3"] = 51;
m["4"] = 52;
char ii = static_cast<char>(i);
int in_arg = m[argv[i]]; //works
int in_arg = m[ii]; //does not work
}
return 0
}
В более ранней версии этого проекта я передавал несколько аргументов командной строки следующим образом:
C:\MyLocation\MyExecutable.exe 4 0 1
Однако из-за необходимости подключаться к более широкой базе кода я теперь получаю один аргумент, подобный следующему:
C:\MyLocation\MyExecutable.exe 401
В результате теперь мне нужно вернуть 401
назад в 4 0 1
и больше не может использовать m[argv[i]]
напрямую, как ранее.
Ошибки, которые я сейчас получаю в Visual Studio 2017:
Ошибка (активная) E0349 ни один оператор "[]" не соответствует этим операндам SkyQChannelChanger g: \ Visual Studio 2017 \ C ++ Проекты \ SkyQChannelChanger \ SkyQChannelChanger \ Main. cpp 147 типов операндов: BasePairMap [char]
... и:
Код серьезности Описание Подавление строки файла проекта Состояние
Ошибка C2679 бинарный '[': не найден оператор, который принимает правый операнд типа 'char' (или нет приемлемого преобразования) SkyQChannelChanger g: \ visual studio 2017 \ c ++ projects \ skyqchannelchanger \ skyqchannelchanger \ main . cpp 147
Я всего лишь пользователь C ++, работающий неполный рабочий день, но могу сказать, argv[i]
- это char *
, а ii
- обычная char
переменная, но я я не уверен в двух вещах:
Почему это важно для карты пар оснований, определенной таким образом.
Как (если требуется) я могу вместо ii
определите char *
.
Tha НКС