[C] Parent und Prev String/char* Struktur Suche

jkallup

Erfahrenes Mitglied
Hallo,

ich suche eine Möglichleit in C (nicht C++) einen String anhand (wie bei C++ veerbung) zu finden.
Also so:

-..
StringKlasseA of Form
StrinkKlasseB of StringKlassA

wobei Form der letzte parent ist und A prev von B ist.

diese Informationen sollen in eine Structure gespeichert werden,
so, dass man mit get_parent die ober klassenstring herausfinden kann (bis Form) - nur halt dynamisch
und mit set_parent(Prev,Parent); die stringklassen setzen kann.

wenn jemand eine idee hat, immer her damit
danke
 
Hi

Da C syntaktisch etc. weder Strings noch Klassen, Klassenmethoden oder Vererbung hat:
Was immer du vorhast, es geht nicht.

Wenn du drei (technisch voneinander unabhängige) structs Fahrzeug, Auto und Motorrad hast
kannst du natürlich in jede struct eine zusätzliche Variable parent reintun
und in jeder existierenden Instanz von Auto und Motorrad "Fahrzeug" reinspeichern.
Aber wozu soll das gut sein?
 
Hallo sheel,

ich meine nicht C++ mit parent Klasse oder so ....
Ich meinte char* struktur.

also, nehmen wir mal an ich habe den string zu parsen:

KlasseB of KlasseA

dann sollte KlasseA solange weiter geparsert werden bis zb. FORM auftataucht.

also so:

KlasseA of Form


KlasseA,KlasseB und Form sind nur Strings/char*'s.
Diese sollten so in eine C Strukture gespeichert werden, das ich diese dynamaisch suchen kann.
zb. mit

if (char* get_parent("KlasseB") != "Form") dann weiter
ansonsten .....

oder mit set_parent_class("KlasseParent","KlasseB")


ist das so verständlicher?
für dieses Problem suche ich eine Idee

Gruß
 
So, sollte vorerst gelöst sein und so ausschauen:
Danke für Euer Verständnis

Code:
#include <stdio.h>
#include <QString>
#include <QVector>

class ElementKlassen
{
public:
	QString parent;
	QString next;
};

static QVector<ElementKlassen> elements;
extern "C"
{
    extern char* strlwr(char*);

    void set_parent_class(char *p, char *n)
    {
	ElementKlassen e;
	bool found = false;

	for (int i = 0; i < elements.count(); ++i)
	{
	    if (!strcmp(elements.at(i).parent.toStdString().c_str(),p))
	    {
		found = true;
		break;
	    }
	}

	if (found == false)
	{
	    e.parent = p;
	    e.next   = n;
	    elements << e;
	}
    }

    char *get_parent_class(char *c)
    {
	for (int i = 0; i < elements.size(); ++i)
	{
	    if (!strcmp(elements.at(i).parent.toStdString().c_str(),c))
	    {
		return (char*)c;
		break;
	    }
	}
	return (char*)"";
    }
}
 

Neue Beiträge

Zurück