Instantiate a class within another class

349 views Asked by At

I'm new to C++ as to Qt. I have the following problem: I want to instantiate a CLEyeCameraCapture object within the Qt header public part, however I get heaps of syntax errors from CLEyeCameraCapture.h.

I get the following (german) syntax errrors:

CLEyeCameraCapture.h(7) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner '_windowName' CLEyeCameraCapture.h(7) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

CLEyeCameraCapture.h(7): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

CLEyeCameraCapture.h(8) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner '_cameraGUID' CLEyeCameraCapture.h(8) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

...and so on...

Thanks in advance for any help. Here is my code:

qtdevc.h (header of my application class)

#ifndef QTDEVC_H
#define QTDEVC_H

#include <QtGui/QMainWindow>
#include "ui_qtdevc.h"
#include <QString>
#include <QDebug>
#include <CLEyeCameraCapture.h>
#include <stdafx.h>

class qtDEVC : public QMainWindow
{
    Q_OBJECT

public:
    qtDEVC(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~qtDEVC();
    Ui::qtDEVCClass ui;
    CLEyeCameraCapture::CLeyeCameraCapture cam;

private:
    QPushButton *PushButton_startCam;
    QPushButton *PushButton_stopCam;
    QPushButton *PushButton_startLogging;
    QPushButton *PushButton_quit;
    QLineEdit *lineEditID;


// begin new code
public slots:
    int startCam();
    void stopCam();
    void quit();
// end new code

};

#endif // QTDEVC_H

CLEyeCameraCapture.h

#ifndef CLEYECAMERACAPTURE_H
#define CLEYECAMERACAPTURE_H

// Sample camera capture class
class CLEyeCameraCapture
{
    CHAR _windowName[256];
    GUID _cameraGUID;
    CLEyeCameraInstance _cam;
    CLEyeCameraColorMode _mode;
    CLEyeCameraResolution _resolution;
    float _fps;
    HANDLE _hThread;
    bool _running;
    std::string _participant;
public:
    CLEyeCameraCapture(LPSTR windowName, GUID cameraGUID, CLEyeCameraColorMode mode, CLEyeCameraResolution resolution, float fps) :
        _cameraGUID(cameraGUID), _cam(NULL), _mode(mode), _resolution(resolution), _fps(fps), _running(false)
    {
        strcpy(_windowName, windowName);
    }

    double GetRandomNormalized();
    bool StartCapture(std::string ID);
    void StopCapture();
    void IncrementCameraParameter(int param);
    void DecrementCameraParameter(int param);
    void Run();
    static DWORD WINAPI CaptureThread(LPVOID instance);
};

My Qt App (not cleaned up yet)

#include "qtdevc.h"
#include <QtGui>
#include <QDebug>
#include <QtGui/QApplication>
#include "stdafx.h"
#include "CLEyeCameraCapture.h"
using namespace std;

qtDEVC::qtDEVC(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    connect (ui.pushButton_startCam, SIGNAL( clicked() ),this,SLOT( startCam() ) );
    connect (ui.pushButton_quit, SIGNAL( clicked() ),this,SLOT( quit() ) );
    connect (ui.pushButton_stopCam, SIGNAL ( clicked() ),this,SLOT( stopCam() ) );
}

qtDEVC::~qtDEVC()
{
}

//get ID of participant
int qtDEVC::startCam()
{
    //qt part

    //ui.startCam->setText("Hi!");
    QString ID;
    //get qString Participant Number
    ID = ui.lineEditID->text();
    //convert to standard string
    std::string IDString = ID.toLocal8Bit().constData();
    //qDebug()<<ID;
    ui.lineEditID->setDisabled(true);
    ui.pushButton_startCam->setDisabled(true);


    //moved this to here from main
    CLEyeCameraCapture *cam[2] = { NULL };
    srand(GetTickCount());
    // Query for number of connected cameras

...

edit

including

"#include " before "#include " in qDEVC.h

solved the problem with the syntax errors in compilation, but now i get errors C2146, C3210 and C2602 when tryin to instanciate

CLEyeCameraCapture::CLeyeCameraCapture cam;

what is the correct way ?

CLEyeCameraCapture::CLeyeCameraCapture *cam[2]; ??
2

There are 2 answers

7
Ashif On BEST ANSWER

To fix your compilation error,

Please Include "#include <stdafx.h>" before "#include <CLEyeCameraCapture.h>" in qDEVC.h.

for more info Compiler Error C2146

Rule: Best practice to include standard headers first, then your own headers.C++ Header order

0
Kurt Pattyn On

Your compiler has no clue what CHAR or GUID is. Include the necessary Windows header files to let the compiler know the definition of these datatypes. Probably including just windows.h could be enough.