2016-06-02 11 views
1

Ich habe einige qt Projekte vor kurzem ein Upgrade von vs 2008 bis 2013 ich eine seltsameVisual Studio 2013 mysteriös C2228 Fehler

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

Fehler, wenn ich ein Kombinationsfeld in meinem gui zugreifen versuchen. Hier

ist der Code, ziemlich geradlinig:

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 

und hier ist die cav: videopanel.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!!! 

} 

Der Fehler, den ich oben in den Zeilen kommt zitiert 51 und 60, wo Ich versuche auf ui zuzugreifen.

So im Compiler ist der Compiler in Ordnung mit der Variablen ui, aber nicht in den anderen Methoden. Das ist eine ziemlich große Sache, ich bin mir nicht sicher, was das Problem ist, aber ich vermute, dass es eine Flagge in VS gibt, die irgendwie den Umfang meiner ui Variable verdeckt. Alle meine anderen privaten Variablen sind in Ordnung, also weiß ich nicht, was das Problem ist.

Ich bin sicher, dass der uic/moc Prozess ordnungsgemäß funktioniert und ich habe versucht, ohne Erfolg zu reinigen und wieder aufzubauen.

+4

Es ist ein Zeiger! – LogicStuff

+1

Was ist der Typ von 'cameraBox'? - Es erwartet, dass es eine Klasse/Struktur ist. Wenn es ein Zeiger oder ein anderer Nicht-Klassen-Typ ist, dann erhalten Sie diesen Fehler. –

+0

@logicstuff Ich habe das gleichzeitig erkannt! "Duh" zu mir. ui-> cameraBox-> currentText() hat es geschafft. Es ist ziemlich offensichtlich, nur aus dem Code zu sehen. – dmedine

Antwort

0

Ersetzen Sie die Zeilen:

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

Von:

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