Im кодирует машину загадки и имеет проблемы с использованием элементов в моем векторе, получая только ошибку сегментации как ошибку. Мне нужно использовать функцию от каждого из роторов в моем векторе на одном символе, преобразовывая символ, когда итератор движется вперед, один раз вперед по списку, один раз назад. Я прокомментировал другие преобразования, чтобы изолировать проблему.Использование функции от каждого объекта в векторе
Machine.cpp
#include "Machine.h"
using namespace std;
Machine::Machine(const vector<Rotor>& rots, const Plugboard & pb)
: rotors(rots), plugboard(pb) {}
// give c's alphabet index
int Machine::getPosition(char c) {
if (c >= 'A' && c <= 'Z') {
return c - 'A';
} else {
cout << "not an accepted character";
return -1;
}
}
// give letter at index i in alphabet
char Machine::atPosition(int i) {
assert(i >= 0 && i <= 25);
return "ABCDEFGHIJKLMNOPQRSTUVWXYZ" [i];
}
char Machine::encode(char c) {
assert(c >= 'A' && c <= 'Z');
// plugboard
// c = plugboard.getMatch(c);
// forward pass through rotors
for (std::vector<Rotor>::iterator it = rotors.begin(); it != rotors.end(); ++it) {
c = it->process(c);
}
// reflector
// c = Reflector::reflect(c);
// backwards pass through rotors
for (std::vector<Rotor>::iterator it = rotors.end(); it != rotors.begin(); --it) {
c = it->processInverse(c);
}
return c;
}
соответствующий вызов часть моей главной функции:
Rotor rot1(argv[1]);
Plugboard pb1(argv[2]);
vector<Rotor> rotors(1, rot1);
Machine machine(rotors, pb1);
machine.encode('A');
Просто наконечник для отладки: вы обязательно должны попробовать использовать отладчик памяти при программировании на C++. Я лично рекомендовал бы drmemory. Это избавило меня от бесчисленных часов разочарования при попытке решить проблемы с сегом и утечки памяти. – Jason
_ «получение ошибки сегментации как ошибка» _ Время запуска вашего отладчика! Тогда вы получите _lot_ еще ... –