У меня проблема с методом подкачки, который я пытаюсь написать. Я убежден, что это этот раздел кода, поскольку он генерирует только исключение, когда программа завершается, если эти строки раскоментированы. Прокомментируйте их, и файл завершится правильно. Мои классы и функция, с которой у меня возникают проблемы, приведены ниже.Проблема с методом свопинга
class WordOccurrence {
public:
//Constructor
WordOccurrence(const std::string& word = "", int num = 0) { num_ = num; word_ = word; };
//Member Functions
bool matchWord(const std::string &); // returns true if word matches stored
void increment(); // increments number of occurrences
//Accessors
std::string getWord() const;
int getNum() const;
private:
std::string word_;
int num_;
};
//Bag
class WordList {
public:
//Big 3:
WordList(int size = 0) { size_ = size; wordArray_ = size>0 ? new WordOccurrence[size] : nullptr;};
~WordList() { delete[] wordArray_; };
WordList(const WordList& list);
//Assignment Overload
WordList& operator =(const WordList& source);
//Member Functions
void addWord(const std::string &word);
friend void swap(WordOccurrence& first, WordOccurrence& second);
// void swap(WordOccurrence& lhs, WordOccurrence& rhs);
void sortList();
void printList();
private:
WordOccurrence *wordArray_; // a dynamically allocated array of WordOccurrences
// may or may not be sorted
int size_;
};
и функция сортировки, содержащая обмен:
void WordList::sortList() {
for (int i = 0; i < size_; ++i) {
for (int j = size_; j > i; --j) {
if (wordArray_[j].getNum() < wordArray_[j - 1].getNum()) {
WordOccurrence tmp(wordArray_[j].getWord(), wordArray_[j].getNum()); //problem is
// tmp = wordArray_[j]; // is
wordArray_[j] = wordArray_[j-1]; // in
wordArray_[j-1] = tmp; // here
//swap(wordArray_[j], wordArray_[j - 1]);
}
}
}
}
Я попытался инициализацией «TMP» в пустой объект как хорошо, но это не делает разницы либо. Я также пробовал std :: swap, и он бросает ту же самую «вызванную точку останова», когда программа завершается. Опять же, ошибка исчезает, если я прокомментирую проблемы. Любая помощь будет оценена!
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –