Каждый раз, когда я компилирую что-то, что # включает определенный пользователем класс, я получаю эти ошибки компиляции, которые всегда выглядят так: main.cpp: undefined ссылка на Complex :: Complex (double, double)
Я свел проблему к набору из трех чрезвычайно простых файлов: main.cpp и, например, Complex.h и Complex.cpp. Я по-прежнему получаю неопределенные справочные ошибки. Я разрабатываю Code :: Blocks в Windows, но получаю то же самое, используя g ++ в Ubuntu. Почему это происходит? Я пробовал создавать Complex.cpp до main.cpp в Code :: Blocks, и я пробовал g ++ main.cpp Complex.cpp
столько же, сколько пробовал только g ++ main. cpp
. Каждый раз одни и те же ошибки.
/*======== main.cpp ========*/
#include "Complex.h"
int main()
{
Complex A(1.0, 1.0);
return 0;
}
/*======== Complex.h ========*/
#ifndef _COMPLEX_H
#define _COMPLEX_H
class Complex
{
public:
double x, y;
Complex(double real, double imag);
};
#endif
/*======== Complex.cpp ========*/
#include "Complex.h"
Complex::Complex(double real, double imag)
{
x = real;
y = imag;
}
ред: теперь у меня разные ошибки, значит, я делаю что-то совершенно не так. Используя тот же код, что и выше, я получаю:
main.cpp: in function 'int main()':
main.cpp:5:5: error: 'Complex' was not declared in this scope
main.cpp:5:13: error: expected ';' before 'A'
Это странно. Все работало раньше, когда у меня был класс в файле .cpp, но это «плохая практика», поэтому я переместил определения классов в файлы .h и сохранил реализацию в файлах .cpp, и теперь ничего не работает.