LINUX.ORG.RU

Неопределенная ссылка на *

 , , , ,


0

1

Здравствуйте. У меня есть несколько файлов main.cpp main.h Patient.cpp Patient.h . Компилирую командой: ‘g++ -o main main.cpp Patient.cpp’ Раньше все компилировалось нормально и работало, до того момента как добавил статические методы в class Patient. Вызываю эти методы из функции main способом:

Patient::method();

Так вот, теперь при компиляции вышеуказанной командой выдает кучу ошибок, я так подозреваю связанных с линковкой:


/usr/bin/ld: /tmp/ccX75qLM.o: в функции «addPatient()»:
main.cpp:(.text+0x37b): неопределённая ссылка на «Patient::Patient()»
/usr/bin/ld: main.cpp:(.text+0x42b): неопределённая ссылка на «Patient::isLastname(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)»
/usr/bin/ld: main.cpp:(.text+0x4b8): неопределённая ссылка на «Patient::doLastname(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)»
/usr/bin/ld: main.cpp:(.text+0x613): неопределённая ссылка на «Patient::isDay(int)»
/usr/bin/ld: main.cpp:(.text+0x6dd): неопределённая ссылка на «Patient::isMonth(int)»
/usr/bin/ld: main.cpp:(.text+0x7a7): неопределённая ссылка на «Patient::isYear(int)»
/usr/bin/ld: main.cpp:(.text+0xb6f): неопределённая ссылка на «Patient::isLastname(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)»
/usr/bin/ld: main.cpp:(.text+0xbf7): неопределённая ссылка на «Patient::doLastname(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)»
/usr/bin/ld: main.cpp:(.text+0xcc2): неопределённая ссылка на «Patient::isInit(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)»
collect2: error: ld returned 1 exit status

Подскажите пожалуйста в чем у меня проблема и как правильно это все скомпилировать.



Последнее исправление: Concorde (всего исправлений: 2)

Ответ на: комментарий от Concorde

Не "', a ```. Обратный апостроф там где буква ё на английской раскладке. Ты можешь отредактировать своё сообщение.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Да, реализация есть в Patient.cpp Вот правда Visual Code эту реализацию почему то не видит , и в файле Patient.h пишет, что

Function definition for ‘isLastname’ not found.

Не знаю что ему не нравится. Может быть Patient:: нужно было ставить, но само же IDE говорит что его нельзя использовать когда метод static

Concorde
() автор топика
Ответ на: комментарий от ox55ff

Как я и говорил компилятор все равно ругается на Patient::


Patient.cpp:26:33: error: cannot declare member function ‘static bool Patient::isDay(int)’ to have static linkage [-fpermissive]
   26 | static bool Patient::isDay(int d)
      |                                 ^
Patient.cpp:38:35: error: cannot declare member function ‘static bool Patient::isMonth(int)’ to have static linkage [-fpermissive]
   38 | static bool Patient::isMonth(int m)
      |                                   ^
Patient.cpp:50:34: error: cannot declare member function ‘static bool Patient::isYear(int)’ to have static linkage [-fpermissive]
   50 | static bool Patient::isYear(int y)
      |                                  ^
Patient.cpp:62:48: error: cannot declare member function ‘static bool Patient::isLastname(std::string)’ to have static linkage [-fpermissive]
   62 | static bool Patient::isLastname(string lastname)
      |                                                ^
Patient.cpp:81:50: error: cannot declare member function ‘static std::string Patient::doLastname(std::string)’ to have static linkage [-fpermissive]
   81 | static string Patient::doLastname(string lastname)
      |                                                  ^
Patient.cpp:91:41: error: cannot declare member function ‘static bool Patient::isInit(std::string*)’ to have static linkage [-fpermissive]
   91 | static bool Patient::isInit(string* init)

Если что методы выглядят в cpp файле примерно так:


static bool Patient::isDay(int d)
{
    if(d >= 1 && d <= 31)
    {
        return true;
    }
    else
    {
        return false;
    }
}

Concorde
() автор топика