Неопределенная ссылка на функцию, которая является членом другого класса - PullRequest
0 голосов
/ 13 февраля 2019

Я создаю простое приложение для решения головоломок судоку.Я впервые создаю что-то серьезное с помощью C ++, поэтому я открыт для критики стиля / структуры кода.
Проблема, с которой я столкнулся, связана с организацией нескольких файлов.
У меня есть два класса, ссылающихся друг на друга с помощьюфункции.Когда я пытаюсь вызвать функцию:

void Field::runColumnCheckout(CellGroup* sender, int cellRelativeX)
{

}

в классе CellGroup, используя экземпляр класса Field:

void CellGroup::runISC(int possibilityNumber)
{
    for (int x = 0; x < 3; x++) {
        int amountInColumn = 0;
        for (int y = 0; y < 3; y++)
            if (cells[x][y]->isPossible(possibilityNumber))
                amountInColumn++;
        if (amountInColumn > 1) {
            //parentField is an instance of a Field class
            //stored in a private field of the CellGroup class
            parentField->runColumnCheckout(this, x);
            return;
        }
    }

    //...
}

Возникает неопределенная ссылка.Я не совсем понимаю, почему.
Все примеры были взяты из cell_group.cpp и field.cpp, которые определяют классы из cell_group.h и field.h.

К сожалению, я не смогудается задать все файлы в вопросе, поскольку они набрали много строк, но вы можете посмотреть их на моем github .

Я нашел аналогичный вопрос и еще один , но, похоже, у них проблемы с компиляцией файлов.У меня было два ссылающихся друг на друга класса, структурированных одинаково, прежде чем добавлять код, с которым у меня сейчас проблемы, и все прекрасно скомпилировано.

Я компилирую все, используя компилятор GCC для Windows и CodeBlocks в качестве IDE.

1 Ответ

0 голосов
/ 13 февраля 2019

CodeBlocks почему-то потеряли связь с файлом field.cpp или не добавили его, создав файл.Переход и ручное добавление его в дерево проекта (даже если он уже был там) Project-> Add files ... решил проблему.Спасибо @Peter за поиск решения.

...