@krox
аспирант, программист, исследователь

Что делать с ошибкой undefined reference to при передаче параметра в функцию?

Имеется Qt_5_3_MinGW_32bit, Windiws 7 64bit.
Работаю в графическом приложении QT.
В хэдере (mainwindow.h) обявлено следующее:
private:
    QString image_path;
    void separateImage(char* path_to_image);


Далее при нажатии на кнопку вызываю метод void separateImage(char* path_to_image);
mainwindow.cpp :
На кнопке написано следующее:
QByteArray ba = image_path.toUtf8(); //image_path - путь до картинки
    char *str;
    str = ba.data();
    separateImage(str); //тут компилятор говорит на ошибку


Возникающие ошибки:
D:\QtProjects\LabArcheo_PartCeramicResiduesAsMosaic\mainwindow.cpp:104: ошибка: undefined reference to `MainWindow::separateImage(char*)'
и
collect2.exe:-1: ошибка: error: ld returned 1 exit status

Данная ошибка возникает, если вместо char передавать QString, соответственно, изменив функцию separate_image.

Часть кода separate_image выглядит следующим образом:
void separateImage(char* path_to_image)
{
    Mat src;
    Mat src_gray;
    int thresh = 100;
    int max_thresh = 255;
    string path;
    path.assign(path_to_image, strlen(path_to_image));
    //string bufstr = path_to_image->toStdString();
   // qDebug("dddd %d",bufstr);
    src = cv::imread(path, 1);
    cvtColor(src, src_gray, CV_BGR2GRAY);
}
  • Вопрос задан
  • 44591 просмотр
Решения вопроса 3
EXL
@EXL
Энтузиаст
Часть кода separate_image выглядит следующим образом:
void separateImage(char* path_to_image)
{
    ...
}

А нужно:
void MainWindow::separateImage(char* path_to_image)
{
    ...
}

Так как separateImage() вы объявили как приватный метод класса MainWindow.
Внимательно читаем документацию на Qt и учебник по языку C++.
Ответ написан
bogolt
@bogolt
Вы объявили separateImage членом класса, а определили ее как глобальную функцию ( не указали имя_класса:: перед определением. Поэтому и возникает undefined reference.
Ответ написан
Комментировать
@krox Автор вопроса
аспирант, программист, исследователь
Пока мне отвечали, нашёл ещё одно решение. Можно удалить из хэдера объявление separate_image и перенести его в самое начало .cpp файла. Тогда будет работать вариант, на котором у меня была ошибка.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы