Forum: PC-Programmierung QT QLabel array Error


von qt (Gast)


Lesenswert?

Hallo,
wenn ich folgenden Code benutzte, kommt der folgende Error.
1
QLabel* _posLabels[7];
2
3
AnzeigeBreit::AnzeigeBreit(QWidget *parent) :
4
    QMainWindow(parent),
5
    ui(new Ui::AnzeigeBreit)
6
{
7
    ui->setupUi(this);
8
9
    _posLabels = {ui->pos0Label, ui->pos1Label, ui->pos2Label, ui->pos3Label, ui->pos4Label, ui->pos5Label, ui->pos6Label};

QLabel istnatürlich includiert.
1
anzeigebreit.cpp:42:16: error: assigning to an array from an initializer list
2
     _posLabels = {ui->pos0Label, ui->pos1Label, ui->pos2Label, ui->pos3Label, ui->pos4Label, ui->pos5Label, ui->pos6Label};

Weiß jemand, woran das liegt?

von Rolf M. (rmagnus)


Lesenswert?

qt schrieb:
> Weiß jemand, woran das liegt?

Weil das da:

qt schrieb:
> assigning to an array from an initializer list

in C++ halt nicht erlaubt ist. Man kann einem Array nichts zuweisen, und 
einen Array-Initialisierer kann man nur - nunja - bei der 
Initialisierung verwenden.

von qt (Gast)


Lesenswert?

In C# geht das...

Dann also so:
1
_posLabels[0] = ui->pos0Label;
2
//usw...

Vielen Dank für die Hilfe!!!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Als Initialiser sollte es auch in C++ gehen:
1
AnzeigeBreit::AnzeigeBreit(QWidget *parent) :
2
    QMainWindow(parent),
3
    ui(new Ui::AnzeigeBreit)
4
{
5
    ui->setupUi(this);
6
7
    _QLabel* posLabels[] = {ui->pos0Label, ui->pos1Label, ui->pos2Label, ui->pos3Label, ui->pos4Label, ui->pos5Label, ui->pos6Label};

von Sven B. (scummos)


Lesenswert?

Benutz' QVector, dann geht das. Diese []-Arrays sind eh totaler Kram für 
fast jeden Anwendungsfall.
1
#include <QtCore/QVector>
2
#include <QDebug>
3
4
int main(...) {
5
  QVector<int> x;
6
  x = {1, 2, 3};
7
  qDebug() << x;
8
  return 0;
9
}

von Tom (Gast)


Lesenswert?

Rolf Magnus schrieb:
> in C++ halt nicht erlaubt ist. Man kann einem Array nichts zuweisen, und
> einen Array-Initialisierer kann man nur - nunja - bei der
> Initialisierung verwenden.

Wie die meisten fehlenden Sprachfeatures kann man auch dieses mit 
hässlichem Schreibaufwand nachrüsten:
1
#include <iostream>
2
#include <initializer_list>
3
#include <algorithm>
4
int foo[5];
5
int main(void)
6
{
7
    auto baz = {1, 2, 3, 4, 5}; // ergibt eine std::initializer_list
8
    std::copy(baz.begin(), baz.end(), foo);
9
    for (int i = 0; i < 5; ++i)
10
        std::cout << foo[i] << "\n";
11
}

von Sven B. (scummos)


Lesenswert?

Oder eine der zahlreichen Vektor-Klassen benutzen, die operator= für 
std::initializer_list überladen. Diese []-Arrays sind überhaupt fast nie 
die richtige Wahl.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.