4

对于 Qt,我是 C++ 的新手。我有以下问题:我想在 Qt 标头公共部分中实例化一个 CLEyeCameraCapture 对象,但是我从 CLEyeCameraCapture.h 中得到大量语法错误。

我收到以下(德语)语法错误:

CLEyeCameraCapture.h(7) : 错误 C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner '_windowName' CLEyeCameraCapture.h(7):错误 C4430:Fehlender Typspezifizierer - int wird angenommen。Hinweis:“默认整数”wird von C++ nicht unterstützt。

CLEyeCameraCapture.h(7):错误 C4430:Fehlender Typspezifizierer - int wird angenommen。Hinweis:“默认整数”wird von C++ nicht unterstützt。

CLEyeCameraCapture.h(8) : 错误 C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner '_cameraGUID' CLEyeCameraCapture.h(8):错误 C4430:Fehlender Typspezifizierer - int wird angenommen。Hinweis:“默认整数”wird von C++ nicht unterstützt。

...等等...

提前感谢您的帮助。这是我的代码:

qtdevc.h(我的应用程序类的头文件)

#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);
};

我的 Qt 应用程序(尚未清理)

#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

...

编辑

包含

qDEVC.h 中“#include”之前的“#include”

解决了编译中语法错误的问题,但现在尝试实例化时出现错误 C2146、 C3210C2602

CLEyeCameraCapture::CLeyeCameraCapture cam;

什么是正确的方法?

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

2 回答 2

2

要修复您的编译错误,

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

更多信息编译器错误 C2146

规则:最佳实践首先包含标准标题,然后是您自己的标题。C++ 头文件顺序

于 2013-08-27T11:05:24.903 回答
0

您的编译器不知道 CHAR 或 GUID 是什么。包括必要的 Windows 头文件,让编译器知道这些数据类型的定义。可能包括就windows.h足够了。

于 2013-08-27T09:44:33.850 回答