Normally I program in java, also have some basic concepts in C (header, make files, functions, pointers, programming in C and using assembly functions[in college], forks, threads, semaphores, pipes).
I am trying to create a simple program in C++ to add to my git repository and to add experience.
Basically in the main I invoke to classes: Categoty and CategoryList.
One CategoryList can have zero or more Category objects.
Problem:
The code gives some error: "undefined reference" basically in the main.
CategoryList *cat = new CategoryList();
Category *c = new Category("Banana","Sobre bananas");
cat->addCategory(*c);
Where I want to simply create a list, and add a element to that List.
The CODE:
CategoryList Header:
#ifndef CATEGORYLIST_H
#define CATEGORYLIST_H
#include <./src/Domain/Category.h>
#include <set>
using namespace std;
class CategoryList{
protected:
    /**
     *  CATEGORY LIST 
     **/
    set<Category> categorySet;
public:
    CategoryList();
    CategoryList(set<Category> c);
    void addCategory(Category c);
    int main();
private:
};
#endif // CATEGORYLIST_H
CategoryList Cpp:
#include "categorylist.h"
CategoryList::CategoryList(){
    this->categorySet = set<Category>();
}
CategoryList::CategoryList(set<Category> list){
    this->categorySet = list;
}
void CategoryList::addCategory(Category c){
        this->categorySet.insert(c);
}
The category Header:
#ifndef CATEGORY_H
#define CATEGORY_H
#include <string>
using namespace std;
class Category{
protected:
    string name;
    string description;
public:
    Category(string name, string description);
private:
};
#endif // CATEGORY_H
The Category Cpp:
#include "Category.h"
/**
 *
 *  CONSTRUCTOR 
 * 
 **/
Category::Category(string name, string description){
    this->name = name;
    this->description = description;
}
The main cpp:
#include "firstcplusplusqt5program.h"
#include <QApplication>
#include <iostream>
#include <string>
#include "List/categorylist.h"
#include "Domain/Category.h"
using namespace std;
void simpleTest();
int main(int argc, char *argv[]){
    simpleTest();
    QApplication app(argc, argv);
    FirstCplusPlusQt5Program w;
    w.show();
    return app.exec();
}
/**
 * 
 * USE THIS FUNCION TO TESTE SIMPLE FUNCTIONS ON STARTUP
 * 
 **/
void simpleTest(){
    cout << "Welcome to José Rodrigues first cpp program." << endl;
    for (int i = 0 ; i < 3 ; i++){
        cout << "Count " << i << endl;
    }
    CategoryList *cat = new CategoryList();
    Category *c = new Category("Banana","Sobre bananas");
    cat->addCategory(*c);
}
The IDE i have used (Kdevelop,Netbeans, QT Creator) don't show any error in this config. So only the compiler gives the error:
/home/arch-admin/Git/FirstCplusPlusQtApp/FirstCplusPlusQt5Program/build> /usr/bin/ninja firstcplusplusqt5program
[1/4] Automatic MOC for target firstcplusplusqt5program
[2/3] Building CXX object CMakeFiles/firstcplusplusqt5program.dir/src/main.cpp.o
[3/3] Linking CXX executable firstcplusplusqt5program
FAILED: firstcplusplusqt5program 
: && /usr/bin/c++  -g  -rdynamic CMakeFiles/firstcplusplusqt5program.dir/src/main.cpp.o CMakeFiles/firstcplusplusqt5program.dir/src/firstcplusplusqt5program.cpp.o CMakeFiles/firstcplusplusqt5program.dir/firstcplusplusqt5program_autogen/moc_compilation.cpp.o  -o firstcplusplusqt5program  /usr/lib/libQt5Widgets.so.5.9.0 /usr/lib/libQt5Gui.so.5.9.0 /usr/lib/libQt5Core.so.5.9.0 && :
CMakeFiles/firstcplusplusqt5program.dir/src/main.cpp.o: In function `simpleTest()':
/home/arch-admin/Git/FirstCplusPlusQtApp/FirstCplusPlusQt5Program/build/../src/main.cpp:37: undefined reference to `CategoryList::CategoryList()'
/home/arch-admin/Git/FirstCplusPlusQtApp/FirstCplusPlusQt5Program/build/../src/main.cpp:38: undefined reference to `Category::Category(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/home/arch-admin/Git/FirstCplusPlusQtApp/FirstCplusPlusQt5Program/build/../src/main.cpp:39: undefined reference to `CategoryList::addCategory(Category)'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
*** Failure: Exit code 1 ***
Project structure (src only because of size):
`-- src
|       |-- Controller
|       |-- Domain
|       |   |-- Author.cpp
|       |   |-- Author.h
|       |   |-- Category.cpp
|       |   |-- Category.h
|       |   |-- annotation.cpp
|       |   `-- annotation.h
|       |-- List
|       |   |-- categorylist.cpp
|       |   `-- categorylist.h
|       |-- PlantUmlGenerator
|       |-- UI
|       |-- Utils
|       |   |-- utils.cpp
|       |   `-- utils.h
|       |-- firstcplusplusqt5program.cpp
|       |-- firstcplusplusqt5program.h
|       |-- firstcplusplusqt5program.ui
|       `-- main.cpp
Could it be the makefile?
In the Qt project is a file CmakeList.txt, should I alter this config files for the dependencies?
Thank you in advance.
CmakeList.txt
cmake_minimum_required(VERSION 2.8.11)
project(FirstCplusPlusQt5Program)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
# Find the QtWidgets library
find_package(Qt5Widgets REQUIRED)
set(firstcplusplusqt5program_SRC
  src/main.cpp
  src/firstcplusplusqt5program.cpp
)
# Create code from a list of Qt designer ui files.
#set(CMAKE_AUTOUIC ON) # use this if you have CMake 3.x instead of the following
qt5_wrap_ui(firstcplusplusqt5program_SRC src/firstcplusplusqt5program.ui)
# Tell CMake to create the helloworld executable
add_executable(firstcplusplusqt5program ${firstcplusplusqt5program_SRC})
# Use the Widgets module from Qt 5.
target_link_libraries(firstcplusplusqt5program Qt5::Widgets)
# Install the executable
install(TARGETS firstcplusplusqt5program DESTINATION bin)
 
     
    