My problem is not with the program but I put it in case it is necessary. I always used VS on the Windows version, now I'm using a Linux version. I'm having a problem so that a simple program recognizes the methods of a class, an error appears: A simpler program, without an .h header, compiles normally. What do I need to do more to fix this problem? In the Windows version, the program runs
The error:
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: in the `_start 'function:
(.text + 0x20): undefined reference to `main '
collect2: error: ld returned 1 exit status
[main.cpp 2020-05-23 17: 28: 09.707]
,, / tmp / ccJJYd6a.o: in the `main 'function:
main.cpp :(. text + 0x1f): undefined reference to `Complex :: Complex () '
main.cpp :(. text + 0x2b): undefined reference to `Complex :: Complex () '
main.cpp :(. text + 0x37): undefined reference to `Complex :: Complex () '
main.cpp :(. text + 0x43): undefined reference to `Complex :: lerComplexo () '
main.cpp :(. text + 0x4f): undefined reference to `Complex :: print () '
main.cpp :(. text + 0x5b): undefined reference to `Complex :: lerComplexo () '
main.cpp :(. text + 0x67): undefined reference to `Complex :: print () '
collect2: error: ld returned 1 exit status
Main.cpp
    #include stdio.h
    #include"Complexo.h"
     int main()
    {
     Complexo a,b,c;
a.lerComplexo();
a.imprimir();
b.lerComplexo();
b.imprimir();
 }
Complexo.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "Complexo.h"
#include<stdio.h>
#include<math.h>
 Complexo::Complexo()
 {
   re = 0;
   im = 0;
 }
 Complexo::Complexo(float r, float i)
 {
   re = r;
   im = i;
 }
 void Complexo::atribuir(float r, float i)
 {
   float novo_re = r;
   float novo_im = i;
 }
 void Complexo::lerComplexo()
 {
   printf("Parte real:");
   scanf("%f", &re);
   printf("\n");
   printf("Parte imaginaria:");
   scanf("%f", &im);
   printf("\n");
 }
 void Complexo::imprimir()   // escrever complexo para o monitor  
 {
   printf("%.1f +%.1fi\t", re, im);
 }
 float Complexo::modulo()  // devolve módulo do número 
 {
   float m;
   m = float(sqrt(pow(re, 2) + pow(im, 2)));
   return m;
 }
 float Complexo::argumento() // devolve argumento do número 
 {
   float arg;
   arg = float(atan2(im, re));
   return arg;
 }
 Complexo Complexo::conjugado()  // devolve o conjugado do número  
 {
   Complexo c;
   c.re = re;
   c.im = -im;
   return c;
  }
 Complexo Complexo::simetrico()  // devolve o simétrico do numero
 {
   Complexo s;
   s.re = re * (-1);
   s.im = im * (-1);
   return s;
 }
 Complexo Complexo::potencia(float exp)  // devolve potência do número
 {
   Complexo p; 
   float mod;
   mod = pow(modulo(), exp);
   p.re = mod * cos(exp * argumento());
   p.im = mod * sin(exp * argumento());
   return p;
 }
       // operações entre 2 complexos  
 Complexo Complexo::operator +(const Complexo& c) // adição   
 {
   Complexo res;
   res.re = re + c.re;
   res.im = im + c.im;
   return res;
  }
  Complexo Complexo::operator -(const Complexo& c) // subtração  
  {
    Complexo res;
    res.re = re - c.re;
    res.im = im - c.im;
    return res;
   }
  Complexo Complexo::operator *(const Complexo& c) // multiplicação 
  {
    Complexo res;
    res.re = re * c.re - im * c.im;
    res.im = re * c.im + im * c.re;
    return res;
   }
  Complexo Complexo::operator /(const Complexo& c) // divisão    
 {
    Complexo num, den, res;
    num = Complexo(re, im);
    den = c;
    num = *this * den.conjugado();
    den = den * den.conjugado();
    return Complexo(num.re / den.re, num.im / den.re);
    }
    // operações entre um complexo (operador da esquerda) e um real (operador da  // 
        direita)  
  Complexo Complexo::operator *(float f)
  {
    Complexo res;
    res.re = re * f;
    res.im = im * f;
    return res;
   }
  Complexo Complexo::operator /(float f)
  {
    Complexo res;
    res.re = re / f;
    res.im = im / f;
    return res;
  }
Complexo.h
        #pragma once  
        class Complexo
        {
        private:
          float re, im;
        public:
          Complexo();   // Construtor cria um número nulo  
          Complexo(float r, float i);
    void atribuir(float r, float i);
    void lerComplexo();  // ler complexo do teclado  
    void imprimir();   // escrever complexo para o monitor  
    float real() { return re; } // devolve coeficiente real  
    float imaginario() { return im; } // devolve coeficiente imaginário  
    float modulo();  // devolve módulo do número  
    float argumento(); // devolve argumento do número  
    Complexo conjugado();  // devolve o conjugado do número  
    Complexo simetrico();  // devolve o simétrico do número 
    Complexo potencia(float exp);  // devolve potência do número 
    // operações entre 2 complexos  
    Complexo operator +(const Complexo& c); // adição   
    Complexo operator -(const Complexo& c); // subtração  
    Complexo operator *(const Complexo& c); // multiplicação  
    Complexo operator /(const Complexo& c); // divisão     
    // operações entre um complexo (operador da esquerda) e um real (operador da  // direita)  
    Complexo operator *(float f);
    Complexo operator /(float f);
};
 
    