I'm new to C++ and so far I've had all code in one and the same file. Now as I'm progressing, I need to separate my code in to source and header files which I'm not very familiar with.
I can make it work with simple tasks, but in this program that I'm now trying to divide in to separate files gives me an error, while when I have it all in one file I can compile it.
I get stuck on the error message
main.cpp:10:1: error: unknown type name 'textEditor'
textEditor siEditor;
If someone could explain why I'm running in to this error and how to prevent it would be appreciated. I read that it could be related to duplicated declarations, but I don't understand from where.
This is how my main.cpp looks:
#include <iostream>
#include <fstream>
using namespace std;
#include "textData.h"
#include "textEditor.h"
textData siData;
textEditor siEditor;
int main() 
{
    cout << "\nWelcome to siEdit!" << endl;
    while (true) 
    {
        cout << "\nWhat would you like to do? \nNew file = n, Append = a, View = v, Quit = q: ";
        string toDo;
        cin >> toDo;
        if (toDo == "n")
        {
            siEditor.openText();
            cout << "Now editing the file: " << siData.fileName.c_str() << endl;
            cout << "Type '=!' to stop editing and save. \n " << endl;
            siEditor.writeText();
        }
        else if (toDo == "a")
        {
            siEditor.appendTextOpen();
            cout << "Now appending text: " << siData.appendTextfileName.c_str() << endl;
            cout << "Type '=!' to stop editing and save changes. \n " << endl;
            siEditor.appendText();
        }
        else if (toDo == "v")
        {
            siEditor.readText();
            cout << "\n";
        }
        else if (toDo == "q")
        {
            return 0;
        }
        else 
        {
            cout << "Invalid input." << endl;
        }
    }
}
siEdit.cpp:
#include <iostream>
#include <fstream>
using namespace std;
#include "textData.h"
#include "textEditor.h"
textData siData;
class textEditor
{
    public: 
    void openText()
    {   
        //when associated file is open. 
        while (siData.siFile.is_open())
        {
            siData.siFile.close();
        }
        cout << "\nWhat do you want to call your file? ";
        cin >> siData.fileName;
        //Creates / Opens fileEditor
        const char* path = siData.fileName.c_str();
        siData.siFile.open(path);
    }
    void writeText()
    {
        bool editing = true;
        bool hasEditing = false;
        while (editing == true)
        {
            //Get user input
            string input = " ";
            getline(cin, input);
            string yesNo;
            if (input == "=!") 
                {   
                    cout << "Would you like to save the file? Y/N" << endl;
                    cin >> yesNo;
                    if (yesNo == "Y")
                    {
                        cout << "Filed saved: " << siData.fileName.c_str();
                        editing = false;
                    }   
                    else if (yesNo == "N")
                    {
                        cout << "No changes have been saved. Exiting." << endl;
                        hasEditing = false;
                        editing = false;
                        siData.siFile.clear();
                    }
                    else 
                    {
                        cout << "Invalid input. Type '=! to exit." << endl;
                    }
                }       
            else
            {
                siData.siFile << input;
                siData.siFile << endl;
                hasEditing = true;
            }
        }
    }
    void readText()
    {
        string line;
        cout << "\nEnter the name of your file: ";
        cin >> siData.fileName;
        cout << "\n";
        const char* path = siData.fileName.c_str();
        // input file stream
        //Internal stream buffer which performes I/O on file.
        ifstream siFileRead(path);
        if(siFileRead.is_open())
        {
            while(getline(siFileRead,line))
            {
                cout << line << endl;
                siData.siFile << line;
            }
        }
        else
        {
            cout << "Unable to open file. Confirm name and file location.";
        }
    }
    // open the existing text file
    void appendTextOpen()
    {
        while (siData.siFileAppend.is_open())
        {
            // erase previous text
            siData.siFileAppend.clear();
            // close the input text file
            siData.siFileAppend.close();
        }
        cout << "\nEnter the name of the file: ";
        //find file name.
        cin >> siData.appendTextfileName;
        //Makes / Opens file
        const char* path = siData.appendTextfileName.c_str();
        siData.siFileAppend.open(path, fstream::app);
    }
    //add text together with previous input.
    void appendText()
    {
        bool editing = true;
        bool hasEditing = false;
        while (editing == true)
        {
            //Gets user input
            string input = " ";
            getline(cin, input);
            if (input == "=!")
            {
                if (hasEditing == true)
                {
                    cout << "File saved: " << siData.appendTextfileName.c_str() << endl;
                    editing = false;
                }
            }
            else
            {
                siData.siFileAppend << input;
                siData.siFileAppend << endl;
                hasEditing = true;
            }
        }
    }
};
textData.h:
#ifndef SIEDITOR_H
#define SIEDITOR_H
class textData
{
    public: 
        string fileName;
        string appendTextfileName;
        ofstream siFile;
        ofstream siFileAppend;
};
#endif
textEditor.h:
#ifndef SIEDITOR_H
#define SIEDITOR_H
class textEditor
{
    public: 
    void openText()
    void writeText()
    void readText()
    void appendTextOpen()
    void appendText()
};
#endif
 
     
     
     
     
    