[C++] Pointerproblem (MyObject **)

  • Ich muss einem Konstruktor ein (char **) übergeben.

    Die (char **) Variable ist nichts anderes ein Pointer auf ein Array von Objektpointern.

    Code
    MyObject *my_objects[3];
    //(...)
    Widget w = Widget(static_cast<char **>(&my_objects));

    Fehlermeldung: 'static_cast': 'MyObject *(*)[3]' kann nicht in 'char **' konvertiert werden.

    Meine konkrete Frage ist ob es einen static_cast<XXX> gibt der mein Problem löst.
    Falls nein sind auch anderen Lösungsvorschläge und Anmerkungen sehr erwünscht :)

    david

    I like Toast!

  • also ich habs nicht so mit den c++ casts aber in dem fall funktioniert ein static_cast nicht, mit einem reinterpret_cast müsste es gehen

    ich weiß überhaupt nicht so richtig ob es sich bringt normalerweise c++ casts zu verwendet, außer vielleicht nen const_cast oder dynamic_cast in vererbungshierarchien ich denke static_casts kann man sich sparen und einfach die c casts verwenden

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • bei der Zeile:

    Code
    Widget w = Widget(static_cast<char **>(&my_objects));

    ist meines Erachtens das & bei my_objects zuviel, sollte also:

    Code
    Widget w = Widget(static_cast<char **>(my_objects));

    heißen.

    Nur kurz überlegt:
    my_objects hat den Typ MyObject**, (&my_objects) hätte demnach den Typ MyObject***

    Ich weiß zwar nicht genau ob mit "Pointer auf ein Array von Objektpointern" das vllt eh genauso gemeint ist, wie du es im cast dann geschrieben hast, aber ein cast von MyObject*** auf char** scheint mir unlogisch.

  • vl. lieg ich ganz daneben, aber wieso probierst du nicht

    Widget w = Widget((char **)(my_objects));

    oder falls du das static unbeingt brauchst

    Widget w = Widget((static char **)(my_objects));

    ?

    ich mach casts nie mit <> sondern ausschließlich mit (type *) - die <> notation ist mir ehrlich gesagt noch nie untergekommen - vl. reden wir jedoch von verschiedenen c++ dialekten..!?

    denk auch, dass das & da zuviel ist, da myobjects ja vom typ her auch als MyObject ** gesehen werdenkann..
    aber das merkst du dann eh realtiv schnell, wenn dus falsch machst wird die sache krachn

    lg

    ¡Otras hijas tienen lindas madres también!

  • ich mach casts nie mit <> sondern ausschließlich mit (type *) - die <> notation ist mir ehrlich gesagt noch nie untergekommen - vl. reden wir jedoch von verschiedenen c++ dialekten..!?


    Die (Typ*) Schreibweise ist die C-Schreibweise. Die <> Notation ist C++ - das hat mit dem Dialekt nix zu tun, das ist im ISO98-C++-Standard. Und mit "static T" hat das schon gar nix zu tun. Das heißt einfach nur so im Unterschied zum dynamic_cast, const_cast und reinterpret_cast. Die haben alle ganz bestimmte Aufgaben (Z.B. dynamic_cast verwendet man üblicherweise, um Objekte in der Vererbungshierarchie hinunterzucasten (zu probieren)). Ein static_cast ist - vereinfacht gesagt - der Cast, der den C-Cast in fast allen Fällen ersetzen kann.

    Dipper dipper dii dipper dii dipper dii duuu

  • Der Unterschied zwischen dynamic_cast und static_cast ist nur, dass bei dynamic_cast zur Lauftzeit noch der Typ kontrolliert wird, ob der Cast wirklich erlaubt ist, bei static_casts wird einfach dem Programmierer vertraut (was performance bringt).

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • np

    und zu:

    (..) bei static_casts wird einfach dem Programmierer vertraut (was performance bringt).

    das stimmt nicht ganz beim static_cast wird nicht "einfach dem programmierer vertraut"

    sauz hat schon gesagt der static_cast ersetzt in fast allen fällen die c-casts aber so sachen wie das problem von dem thread oder das casten von streams wenn man zb in ne datei nen "int x" schreiben will kann man nicht einfach nen static_cast<char*>&x nehmen da spuckt der compiler fehler aus und man muss auf (char*) oder reinterpret_cast zurückgreifen

    aber wie gesagt ich weiß nicht in wie fern sich c++ casts was bringen, ich hab sie ne zeit lang verwendet und dann bei c# waren sie auf ein mal weg, ich weiß nicht ob bei c# automatisch intern noch immer die richtigen casts (static, dynamic bei vererbten objekten usw) irgendwie zugeordnet werden ooder ob man sie einfach fallen gelassen hat, wäre interessant wenn das jemand wüsste

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • aber wie gesagt ich weiß nicht in wie fern sich c++ casts was bringen

    In C++ ist sehr sehr viel Mist drinnen, den eigentlich keine Sau braucht. Das ist ja der Grund, warum ich diese Sprache nicht mag, ich bin eher ein Fan von einfachen Konzepten, die effektiv alles abdecken, was man als Softwareentwickler so brauchen könnte, ohne dass man 10 Jahre lang die Sprache studieren müsste, um alle Feinheiten zu verstehen.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • hal: und welche Sprache befriedigt dich dann eher wenn man fragen daf.


    Ich kann für mich antworten, dass Eiffel eine in Punkto OO, Sauberkeit und Einfachheit sehr befriedigende Sprache ist.

    btw: Die C++ Casts gibt es aus mehreren Gründen:
    1. Es soll expliziter gesagt werden, welche Cast-Art man meint.
    2. Besseres Fehlerhandling, wenn der Cast nicht hinhaut.
    3. Die C-Casts kann man mit grep o.ä. nur extrem schwer bis gar nicht aus dem Code extrahieren. Dagegen ist das Greppen der C++ Casts trivial.
    4. Die Namen für die Casts sind bewusst lange gewählt, damit man sie weniger einsetzt. Casts sind nämlich oft mißbraucht worden.

    Dipper dipper dii dipper dii dipper dii duuu

  • hal: und welche Sprache befriedigt dich dann eher wenn man fragen daf.

    Naja, ich kann leider keine Sprache, die wirklich alles besitzt, was ich mir wünschen würde.
    Objective C 2.0 kommt dem ganzen schon sehr nahe, allerdings fehlen der Sprache Namespaces, was mir persönlich sehr sehr wichtig wäre.
    Ruby hat diese soweit ich weiß, allerdings gibt es noch keinen Compiler dafür.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • heh.. hier gibts wohl nicht viele c# fans oder *g*
    ich kenne zwar nur c, cpp, java und c# und ganz wenig rebol aber ich finde c# lässt keine wünsche offen, es ist einfach alles drin was man braucht, schnell, gut lesbar

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • Ich hab mir C# noch nicht genauer angesehen. Soweit ich weiß kommt category-support (unter einem anderen Namen) erst in der nächsten Version, insofern lässt es für mich sehrwohl Wünsche offen.
    Abgesehen davon, dass es nicht cross-platform ist und trotzdem eine VM braucht (alle Nachteile von Java ohne dessen Vorteile).

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!