Du bist nicht eingeloggt! Möglicherweise kannst du deswegen nicht alles sehen.
  (Noch kein mods.de-Account? / Passwort vergessen?)
Zur Übersichtsseite
Hallo anonymer User.
Bitte logge dich ein
oder registriere dich!
 Moderiert von: Che Guevara


 Thema: Gehirnsalat ( wir unter uns )
« erste « vorherige 1 ... 6288 6289 6290 6291 [6292] 6293 6294 6295 6296 ... 6582 nächste » letzte »
erste ungelesene Seite | letzter Beitrag 
Renga

renga
Doch, als private Funktion. Genau so, wie ich es oben aus der Header Datei gepostet hab.
27.05.2013 12:10:03  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
bzw. hat DEIN struct dort kein template
27.05.2013 12:10:05  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
…und sofern sich da nix entscheidendes geändert hat kann man template-funktionen eh nicht in einer separaten .cpp packen, sondern nur in den header…
27.05.2013 12:11:07  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Renga

renga
der komplette header:

 
Code:
template <class T>
class List
{
private:
	struct Element{
		Element* previous;
		Element* next;
		T* content;
	};

	Element* head;
	Element* tail;

	Element* newElement(T* content);
public:
	List(void);
	~List(void);

	void push(T* content);
	Element* pop();
	bool isEmpty();
	int length();
	Element* getHead();
	Element* getTail();
	Element* get(int i);
	bool erase(int i);
	bool replace(Element* content, int i);

};


27.05.2013 12:11:22  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
struct Element{
Element* previous;
Element* next;
T* content;
};

Element* newElement(T* content);

newElement liegt doch eindeutig _außerhalb_ von struct Element.
27.05.2013 12:11:43  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
Ah ok. Jetzt wird das ganze verständlicher Augenzwinkern
27.05.2013 12:12:27  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Renga

renga
Hm also wenn ich mir das Beispiel hier anschaue, wird das mit den Templates nicht wirklich anders gemacht:

http://www.tutorialspoint.com/cplusplus/cpp_templates.htm
(ganze unten die Stack implementierung)
27.05.2013 12:13:03  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gore

Gori
Ich ziehe Benutzer aus einem Soap-Service.
Nun habe ich leider Zusatzdaten in einer projektspezifischen DB, da ich hier niemanden bewegen kann gewisse Dinge zu standardisieren.
Wenn ich jetzt die Zusatzdaten pro Benutzerobjekt ziehe, kriege ich mal ganz fix 400-600 (Lazy Loading sei dank) SQL-Statements zusammen.
Beispiel wäre eine Auflistung der Benutzer (SOAP) und welcher Klinik sie angehören (DB).
Mit leben oder einen Query abfeuern und den Array mit den Objekten mergen oder Firma wechseln?
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Gore am 27.05.2013 13:21]
27.05.2013 13:20:27  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Achsel-des-Bösen

AUP Achsel-des-Bösen 06.10.2009
Sind die Ladezeiten mit realsitischen Datenmengen ein Problem? Falls ja, tu was dagegen. Falls nicht, schreib nen Kommentar an den Code das das ggf. bei Performanceproblemen gefixt werden muss und lass es so.
27.05.2013 14:40:55  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
cms

AUP cms 14.11.2012
 
Zitat von Renga

 
Code:
template <class T>
Element* List<T>::newElement(T* content){
	Element* element = new element;
	element->next = null;
	element->previous = null;
	element->content = content;

	return element;
}


Also erst einmal musst du, wenn überhaupt,
Element* element = new Element;
schreiben. Ich glaube aber, dass es mit
Element* element;
getan ist.

Außerdem kann da so einiges nicht funktionieren, weil du das Struct unter private hast, aber einige Public-Funktionen einen Pointer auf ein Element-Struct zurückgeben sollen.
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von cms am 27.05.2013 15:09]
27.05.2013 14:57:48  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Gore

Gori
 
Zitat von Achsel-des-Bösen

Sind die Ladezeiten mit realsitischen Datenmengen ein Problem? Falls ja, tu was dagegen. Falls nicht, schreib nen Kommentar an den Code das das ggf. bei Performanceproblemen gefixt werden muss und lass es so.



Etwa 1,5 Sek, ist allerdings eine interne Verwaltungssoftware für andere Projekte.
27.05.2013 14:58:56  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
cms:
Das geht schon, allerdings können die entsprechenden Funktionen nur aus Bereichen aufgerufen werden, die auf die privaten Elemente Zugriff haben.

 
Code:
class test
{
private:
    struct private_struct
    {
        int x;
    };

public:
    private_struct *get_private_struct()
    {
        return new private_struct();
    }

    friend void can_call_dat_thing(test *t);
};

void cannot_call_dat_thing(test *t)
{
    test::private_struct *ps = t->get_private_struct();
}

void can_call_dat_thing(test *t)
{
    test::private_struct *ps = t->get_private_struct();
    delete ps;
}

int main()
{
    test t;
    cannot_call_dat_thing(&t);
    can_call_dat_thing(&t);
}


Resultiert dann in
 
Code:
~ g++ priv.cc
priv.cc: In function &#8216;void cannot_call_dat_thing(test*)&#8217;:
priv.cc:5:12: error: &#8216;struct test::private_struct&#8217; is private
     struct private_struct
            ^
priv.cc:21:11: error: within this context
     test::private_struct *ps = t->get_private_struct();
           ^
zsh: exit 1     g++ priv.cc



Das Verhalten ist hier allerdings mit hoher Wahrscheinlichkeit nicht gewünscht, vermute ich mal.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von csde_rats am 27.05.2013 15:04]
27.05.2013 15:03:47  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
cms

AUP cms 14.11.2012
@Gore: Strg + a, Entf, Return und dann die Firma wechseln. :P

@rats: ja, wenn. fröhlich
27.05.2013 15:06:26  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
Ich muss mich gerade mal am Kopf kratzen… die Konstruktion ergibt so aber noch keinen Sinn,
der Friend sähe die Methode auch, wenn sie private wäre.

Hmm, vermutlich ergibt diese Art von Zugriffsrechteüberlagerung nur im Zusammenspiel mit protected und Vererbung schlüssige Anwendungsfälle.

C++ ist schon eine feine Sprache
27.05.2013 15:09:36  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
cms

AUP cms 14.11.2012
So, Renga, nachdem ich das Problem etwas genauer ausgeleuchtet habe komme ich zu folgenden Ergebnissen:

  • Templates können nicht auf Header und cpp aufgeteilt werden.
  • Du solltest mehr darauf achten, dass Pointer korrekt initialisiert und auch wieder zernichtet werden.
  • Da fehlen eine Menge Deklarationen. Beachte vor allem das
    typename List<T>::Element*



 
Code:
#pragma once

template <class T>
class List
{
public:
    struct Element
    {
        T* content;
        Element* previous;
        Element* next;

        Element() : previous(nullptr), next(nullptr), content(nullptr) {}
        ~Element()
        {
            if (previous) delete previous;
            if (next) delete next;
            if (content) delete content;
        }
    };


    List() : head(nullptr), tail(nullptr) {}
    ~List();

    void push(T* content);
    Element* pop();
    bool isEmpty();
    int length();
    Element* getHead();
    Element* getTail();
    Element* get(int i);
    bool erase(int i);
    bool replace(Element* content, int i);

private:
    Element* head;
    Element* tail;

    Element* newElement(T* content);
};

template <class T>
List<T>::~List()
{
    if (head) delete head;
    if (tail) delete tail;
};

template <class T>
typename List<T>::Element* List<T>::newElement(T* content)
{
    Element* element = new Element;
    element->content = content;

    return element;
};

// ...


PS:
nullptr
ist C++11-spezifisch. Wenn dein Compiler das noch nicht unterstützt, dann tut es eine stumpfe 0 auch.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von cms am 27.05.2013 18:53]
27.05.2013 18:35:52  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Noch_ein_Kamel

Guerilla
Ach toll bis Freitag muss ich ja noch Steuererklärung machen... mhhh -_-
27.05.2013 19:53:47  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Smoking

AUP Smoking 09.09.2023
Sind sie so streng bei dir?
27.05.2013 19:55:45  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Noch_ein_Kamel

Guerilla
Ich muss zumindest prüfen, ob ich unter die Frist falle bis zur Frist? Breites Grinsen
27.05.2013 20:05:51  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Renga

renga
...
Danke erstmal cms, muss mir das in Ruhe angucken.
27.05.2013 20:11:14  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
Ich glaube Typebounds mit Covariance/Contravariance etc. bei Java muss ich mir in meine Spickzettel-Datei schreiben Breites Grinsen
27.05.2013 20:16:23  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Redh3ad

AUP Redh3ad 11.10.2009
Was ist denn das?
27.05.2013 20:27:00  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
csde_rats

AUP csde_rats 04.09.2021
Findet man in java.util.Collections ganz oft, sieht so aus:

 
Code:
static <T> int binarySearch(List<? extends Comparable< ? super T > > list, T key)


List<? extends Comparable< ? super T > >

Das sagt halt letztendlich nur "Liste mit einem Datentypen, der irgendwann mal von Comparable geerbt hat". Weil <T extends Comparable> nicht Klassen erfasst, die von einer Klasse erben die von Comparable erben. Warum auch immer.
So ganz 100 prozentig habe ich das auch noch nicht kapiert, kommt mir persönlich aber wieder ein wenig nach einem Um-Schwächen-Herum-Sprachhack vor, der einem am häufigsten wohl begegnen dürfte, wenn man selber irgendwelche Containerartigen Gebilde implementiert.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von csde_rats am 27.05.2013 20:31]
27.05.2013 20:29:57  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
TriggerTG

TriggerTG
Hast du heute eigentlich Geburtstag, Kamel?
27.05.2013 21:29:14  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Noch_ein_Kamel

Guerilla
Oo wie kommst auf sowas?
27.05.2013 22:12:54  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Danzelot

AUP Danzelot 28.02.2014
Habe ich heute Morgen auch überlegt Breites Grinsen
27.05.2013 22:17:45  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Noch_ein_Kamel

Guerilla
Wofür haben wir denn die Liste?!
27.05.2013 22:23:48  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
cms

AUP cms 14.11.2012
 
Zitat von csde_rats

Findet man in java.util.Collections ganz oft, sieht so aus:

 
Code:
static <T> int binarySearch(List<? extends Comparable< ? super T > > list, T key)


List<? extends Comparable< ? super T > >

Das sagt halt letztendlich nur "Liste mit einem Datentypen, der irgendwann mal von Comparable geerbt hat". Weil <T extends Comparable> nicht Klassen erfasst, die von einer Klasse erben die von Comparable erben. Warum auch immer. Quatsch***
So ganz 100 prozentig habe ich das auch noch nicht kapiert, kommt mir persönlich aber wieder ein wenig nach einem Um-Schwächen-Herum-Sprachhack vor, der einem am häufigsten wohl begegnen dürfte, wenn man selber irgendwelche Containerartigen Gebilde implementiert.

Das sagt: "Eine Liste mit einem beliebigen Datentypen*, der von Comparable erbt. Allerdings nur Typen, die vom Typ oder einem Supertyp von T sind**, damit man es mit dem key (der vom Typ T ist) vergleichen kann."

* Ist ja für den Algorithmus vollkommen egal, hauptsache vergleichbar.

*** <T extends Comparable> heißt, dass du einen bestimmten Datentyp T hast, der von Comparable erbt. Aber das ist für den Algorithmus nicht zweckdienlich. Man bekommt eine Liste mit irgendwelchen Daten darin. Und man will den Key vom Typ T finden. Es kann aber sein, dass in der Liste Daten von einem anderen Typ als T sind. Das ist auch Ok, diese Daten müssen einfach nur mit dem Key vergleichbar sein. Das ist alles.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von cms am 27.05.2013 22:35]
27.05.2013 22:26:26  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Smoking

AUP Smoking 09.09.2023
 
Zitat von Noch_ein_Kamel

Ich muss zumindest prüfen, ob ich unter die Frist falle bis zur Frist? Breites Grinsen



Du gehst also davon aus, dass sie dir direkt eine Geldbuße aufs Auge drücken, solltest du die mögliche Frist verpassen?
28.05.2013 1:09:56  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Danzelot

AUP Danzelot 28.02.2014
Nachdem die Marketingabteilung meiner Uni für den gescheiterten Versuch einer Karrieremesse (kaum Firmen, kaum Besucher) die Liegewiese in der Mitte des Campus ruiniert hat, sind ein paar schöne Plakate aufgetaucht: http://imgur.com/a/ixgN6 Breites Grinsen
28.05.2013 1:14:31  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Noch_ein_Kamel

Guerilla
 
Zitat von Smoking

 
Zitat von Noch_ein_Kamel

Ich muss zumindest prüfen, ob ich unter die Frist falle bis zur Frist? Breites Grinsen



Du gehst also davon aus, dass sie dir direkt eine Geldbuße aufs Auge drücken, solltest du die mögliche Frist verpassen?

nein... ich geh davon aus dass die frist abläuft und ich kein bock habe mich die 2 stunden hinzusetzen für 3,50¤
28.05.2013 8:19:49  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
 Thema: Gehirnsalat ( wir unter uns )
« erste « vorherige 1 ... 6288 6289 6290 6291 [6292] 6293 6294 6295 6296 ... 6582 nächste » letzte »

mods.de - Forum » Webdesign & Coding » 

Hop to:  

Thread-Tags:
Mod-Aktionen:
23.08.2018 12:40:15 TriggerTG hat den Thread-Titel geändert (davor: "Wiederbelebungssalat")
09.03.2017 08:55:19 TriggerTG hat den Thread-Titel geändert (davor: "Gehirnsalat")
21.05.2014 16:08:26 Redh3ad hat den Thread-Titel geändert (davor: "Hochzeitssalat")
10.05.2014 09:43:28 Redh3ad hat den Thread-Titel geändert (davor: "Gehirnsalat")
19.10.2013 21:43:03 [DK]Peacemaker hat diesen Thread repariert.
04.10.2013 20:11:45 TriggerTG hat den Thread-Titel geändert (davor: "Damiferkel-Salat")
29.08.2013 19:59:27 [DK]Peacemaker hat den Thread-Titel geändert (davor: "HerpDerpSalat")
19.08.2013 10:04:19 TriggerTG hat den Thread-Titel geändert (davor: "SirSiggiSalat")
13.08.2013 18:43:13 TriggerTG hat den Thread-Titel geändert (davor: "Kamelwochensalat")
05.08.2013 09:47:37 TriggerTG hat den Thread-Titel geändert (davor: "Gehirnsalat")
24.06.2013 16:30:39 TriggerTG hat den Thread-Titel geändert (davor: "cmssalat")
20.06.2013 12:58:35 TriggerTG hat den Thread-Titel geändert (davor: "Krissalat")
13.06.2013 10:59:25 TriggerTG hat den Thread-Titel geändert (davor: "Gehirnsalat")
08.06.2013 11:28:06 TriggerTG hat den Thread-Titel geändert (davor: "rABBIntensalat")
03.06.2013 09:56:52 TriggerTG hat den Thread-Titel geändert (davor: "Gehirnsalat")

| tech | impressum