Answers in Initializing private static members say that the private static member should be initialized in the source file.
Hence, this is what I tried:
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QApplication>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <iostream>
#include <QDebug>
class MainWindow : public QMainWindow
{
Q_OBJECT
static pthread_mutex_t mutexVariable;
static pthread_cond_t conditionVariable;
static QList <int> queueLIFO;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
static void *producerThreadFunction (void *arg);
static void *consumerThreadFunction (void *arg);
int start ();
};
#endif // MAINWINDOW_H
and .cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
MainWindow::mutexVariable = PTHREAD_MUTEX_INITIALIZER;
MainWindow::conditionVariable = PTHREAD_COND_INITIALIZER;
}
error: undefined reference to `MainWindow::mutexVariable'
error: undefined reference to `MainWindow::conditionVariable'
I also tried this:
#include "mainwindow.h"
MainWindow::mutexVariable = PTHREAD_MUTEX_INITIALIZER;
MainWindow::conditionVariable = PTHREAD_COND_INITIALIZER;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
}
It resulted in:
error: 'pthread_mutex_t MainWindow::mutexVariable' is private static pthread_mutex_t mutexVariable;// = PTHREAD_MUTEX_INITIALIZER; ^