PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cpp: Indexoperator und Pointer



Fabeltier
20-04-2007, 21:54
Hey,
Ich habe folgenden Qt Code - die Probleme koennten durchaus aber auch allg. Verstaendnisschwierigkeiten von mir mit C++ darstellen.

Ich habe folgende Fragen:
1. Mein QList Objekt erkennt anscheinend den Indexoperator nicht (steht aber in der Referenz drin). Der Compiler jammert jedoch staendig bei dem Code unten, dass "list" keine Attribute "sz1" oder "sz2" enthaelt, was mach ich da falsch?

2. Eigentlich wollte ich ja einen Pointer auf "list" und dann mit '->' auf die Attribute der Elemente (die ich mit [] anspechen wollte) zugreifen. Allerdings meint mein Compiler (gcc) wieder, dass das QList Objekt keinen Pointertype darstellt und somit ueber '.' auf etwaige Attribute zugegriffen werden muss. Warum bekomme ich da keinen Pointerzugriff hin?

3. Ach ja und der Code unten geht nicht, weil eben "list" keine Attribute hat, die "sz1" oder "sz2" heissen. Was mach ich also damit ich das Demo zum laufen bekomme so wie ich mir das vorstelle?

TIA:)


// QList test
#include <QApplication>
#include <QList>
#include <iostream>

struct Element
{
QString sz1;
QString sz2;
};

int main()
{
std::cout << "main started\n";

std::cout << "\tinitializing elements - starts\n";
Element* e1 = new Element;
e1->sz1 = "first string - first element";
e1->sz2 = "second string - first element";
Element* e2 = new Element;
e2->sz1 = "first string - second element";
e2->sz2 = "second string - second element";
std::cout << "\tinitializing elements - done\n";

std::cout << "\tsetting up list - started\n";
QList<Element>* list = new QList<Element>;
list->append(*e1);
list->append(*e2);
std::cout << "\tsetting up list - done\n";

std::cout << "\tshow elements..\n";
std::cout << "\t0. sz1:\t" << list[0].sz1.toStdString();
std::cout << "\t0. sz2:\t" << list[0].sz2.toStdString();
std::cout << "\t1. sz1:\t" << list[1].sz1.toStdString();
std::cout << "\t1. sz2:\t" << list[1].sz2.toStdString();
std::cout << "\tshow elements done\n";

std::cout << "assingment starts\n";
list[1].sz1 = "dummy1";
list[1].sz2 = "dummy2";
std::cout << "\n";

std::cout << "\tshow elements second time..\n";
std::cout << "\t0. sz1:\t" << list[0].sz1.toStdString();
std::cout << "\t0. sz2:\t" << list[0].sz2.toStdString();
std::cout << "\t1. sz1:\t" << list[1].sz1.toStdString();
std::cout << "\t1. sz2:\t" << list[1].sz2.toStdString();
std::cout << "\tshow elements second time - done\n";

std::cout << "main finished\n";
return 0;
}

Fabeltier
20-04-2007, 22:33
Sry, hab das Problem gefunden, lag an den Prioritaeten; wenn ich den Indexoperator folgendermassen verwende (*list)[index] kann ich auf das einzelne Element zugreifen. :)