Visual Studio 2013 神秘的 C2228 错误

visual studio 2013 mysterious C2228 error

本文关键字:C2228 错误 Studio 2013 Visual      更新时间:2023-10-16

我最近将一些qt项目从2008年升级到2013年。我得到了一个奇怪的

Error   1   error C2228: left of '.currentText' must have class/struct/union    

当我尝试访问我的 GUI 中的组合框时出错。

这是代码,非常简单:

videopanel.h
#ifndef VIDEOPANEL_H
#define VIDEOPANEL_H
#include <QCamera>
#include <QtWidgets>
#include <QMediaRecorder>
#include <QCameraImageCapture>
#include <QCameraViewFinder>
#include <QVideoWidget>
namespace Ui {
class videoPanel;
}
class videoPanel : public QWidget
{
    Q_OBJECT
public:
    explicit videoPanel(QWidget *parent = 0);
    ~videoPanel();
private slots:
    void monitorToggle(int state);
private:
    Ui::videoPanel *ui;
    QCamera *camera;
    QList<QCameraInfo> cameraInfos;
    QCameraImageCapture *imageCapture;
    QMediaRecorder* mediaRecorder;
    QImageEncoderSettings imageSettings;
    QAudioEncoderSettings audioSettings;
    QVideoEncoderSettings videoSettings;
    QString videoContainerFormat;
    bool isCapturingVideo;
    void setCamera(void);
};
#endif // VIDEOPANEL_H

这是CPP:视频面板.cpp

#include "videopanel.h"
#include "ui_videopanel.h"
#include <QMediaService>
#include <QMediaRecorder>
#include <QCameraViewfinder>
#include <QCameraInfo>
#include <QMediaMetaData>
#include <iostream>

videoPanel::videoPanel(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::videoPanel),
    camera(0),
    imageCapture(0),
    mediaRecorder(0)
{
    ui->setupUi(this); // fine!!!
    QObject::connect(ui->monitorCheck, SIGNAL(stateChanged(int)), this, SLOT(monitorToggle(int)) );

    // Camera devices:
    cameraInfos = QCameraInfo::availableCameras();
    // display device descriptions in combo box
    for (QList<QCameraInfo>::Iterator it = cameraInfos.begin();
        it != cameraInfos.end(); ++it)
        ui->cameraBox->addItem(it->description()); // fine!!!
}
videoPanel::~videoPanel()
{
    delete mediaRecorder;
    delete imageCapture;
    delete camera;
}
void videoPanel::setCamera(void) {
    delete imageCapture;
    delete mediaRecorder;
    delete camera;

    for (QList<QCameraInfo>::Iterator it = cameraInfos.begin();
        it != cameraInfos.end(); ++it)
        if (!it->description().compare(ui->cameraBox.currentText())) // not fine!!!
            camera = new QCamera(*it);
}

void videoPanel::monitorToggle(int state) {
    if (state == Qt::CheckState::Checked);
    std::cout << ui->cameraBox.currentText() << std::endl; // not fine!!!
}

我上面引用的错误出现在第 51 行和第 60 行,我尝试访问 ui .

所以在构造函数中,编译器可以使用变量ui,但在其他方法中则不然。这是非常样板的qt东西,所以我不确定问题是什么,但是,我怀疑VS中有一些标志以某种方式掩盖了我的ui变量的范围。我所有其他私有变量都可以,所以我不知道问题是什么。

我确信uic/moc过程正常工作,我尝试清洁和重建无济于事。

替换以下行:

if (!it->description().compare(ui->cameraBox.currentText()))
std::cout << ui->cameraBox.currentText() << std::endl;

由:

if (!it->description().compare(ui->cameraBox->currentText()))
std::cout << ui->cameraBox->currentText() << std::endl;