The problem is on these lines:
aClassB.startTheThread((void (*)(int*)) &ClassA::parseData);
...
pthread_create(&_theDataReaderThread,
                                      NULL,
                                     (void* (*)(void*)) &ClassB::dataReader,
                                      this);
Those are invalid type-casts.  You cannot cast a non-static method pointer into a function pointer like this.  pthread_create() requires a standalone function or class static method only.
If you are using C++11 or later, try this instead:
ClassA.h
class ClassA
{
public:
    ClassA();
    ~ClassA();
    void setFunctionPointers();
    void parseData(int* dataBuffer);
};
ClassA.cpp
#include "ClassB.h"
ClassB aClassB;
ClassA::ClassA(){}
ClassA::~ClassA(){}
void ClassA::setFunctionPointers(){
    aClassB.startTheThread( [this](int *dataBuffer){ this->parseData(dataBuffer); } );
}
void ClassA::parseData(int* data){
    std::cout << "data received: " << *data << "\n";
}
ClassB.h
#include <functional>
#include <pthread.h>
class ClassB
{
public:
    using ParseFunction = std::function<void(int*)>;
    ClassB();
    ~ClassB();
    static void* dataReader(void*);
    void startTheThread(ParseFunction parseFunction);
    ParseFunction _theParseFunction;
    pthread_t _theDataReaderThread;
};
ClassB.cpp
int* intPointer;
ClassB::ClassB(){}
ClassB::~ClassB(){
    delete intPointer;
}
void* ClassB::dataReader(void *arg){
    ClassB *pThis = static_cast<ClassB*>(arg);
    intPointer = new int(5);
    while (true){
        pThis->_theParseFunction(intPointer);
        sleep(2);
    }
}
void ClassB::startTheThread(ParseFunction parseFunction){
    _theParseFunction = std::move(parseFunction);
    int threadReturn = pthread_create(&_theDataReaderThread,
                                    NULL,
                                    &ClassB::dataReader,
                                    this);
}
main method
int main()
{
    ClassA aClassA = ClassA();
    aClassA.setFunctionPointers();
    while(true)
    {
    }
    return 0;
}
Though, you really should be using std::thread instead of pthread_create():
ClassA.h
class ClassA
{
public:
    ClassA();
    ~ClassA();
    void setFunctionPointers();
    void parseData(int* dataBuffer);
};
ClassA.cpp
#include "ClassB.h"
ClassB aClassB;
ClassA::ClassA(){}
ClassA::~ClassA(){}
void ClassA::setFunctionPointers(){
    aClassB.startTheThread( [this](int *dataBuffer){ this->parseData(dataBuffer); } );
}
void ClassA::parseData(int* data){
    std::cout << "data received: " << *data << "\n";
}
ClassB.h
#include <functional>
#include <thread>
class ClassB
{
public:
    using ParseFunction = std::function<void(int*)>;
    ClassB();
    ~ClassB();
    void dataReader();
    void startTheThread(ParseFunction parseFunction);
    ParseFunction _theParseFunction;
    std::thread _theDataReaderThread;
};
ClassB.cpp
int* intPointer;
ClassB::ClassB(){}
ClassB::~ClassB(){
    delete intPointer;
}
void ClassB::dataReader(){
    intPointer = new int(5);
    while (true){
        _theParseFunction(intPointer);
        sleep(2);
    }
}
void ClassB::startTheThread(ParseFunction parseFunction){
    _theParseFunction = std::move(parseFunction);
    _theDataReaderThread = std::thread([this](){ this->dataReader(); });
}
main method
int main()
{
    ClassA aClassA = ClassA();
    aClassA.setFunctionPointers();
    while(true)
    {
    }
    return 0;
}
However, if you are using a pre-C++11 compiler, then you have to use a plain pointer-to-member-function instead:
ClassA.h
class ClassA
{
public:
    ClassA();
    ~ClassA();
    void setFunctionPointers();
    void parseData(int* dataBuffer);
};
ClassA.cpp
#include "ClassB.h"
ClassB aClassB;
ClassA::ClassA(){}
ClassA::~ClassA(){}
void ClassA::setFunctionPointers(){
    aClassB.startTheThread(&ClassA::parseData, this);
}
void ClassA::parseData(int* data){
    std::cout << "data received: " << *data << "\n";
}
ClassB.h
#include <pthread.h>
class ClassA;
class ClassB
{
public:
    typedef void (ClassA::*ParseFunction)(int*);
    ClassB();
    ~ClassB();
    static void* dataReader(void*);
    void startTheThread(ParseFunction parseFunction, ClassA*);
    ParseFunction _theParseFunction;
    ClassA *_theParseObj;
    pthread_t _theDataReaderThread;
};
ClassB.cpp
int* intPointer;
ClassB::ClassB(){}
ClassB::~ClassB(){
    delete intPointer;
}
void* ClassB::dataReader(void *arg){
    ClassB *pThis = static_cast<ClassB*>(arg);
    intPointer = new int(5);
    while (true){
        pThis->_theParseObj->*(pThis->_theParseFunction)(intPointer);
        sleep(2);
    }
}
void ClassB::startTheThread(ParseFunction parseFunction, ClassA *parseObj){
    _theParseFunction = parseFunction;
    _theParseObj = parseObj;
    int threadReturn = pthread_create(&_theDataReaderThread,
                                    NULL,
                                    &ClassB::dataReader,
                                    this);
}
main method
int main()
{
    ClassA aClassA = ClassA();
    aClassA.setFunctionPointers();
    while(true)
    {
    }
    return 0;
}