extern const Probleme



  • Nimm ARRAYSIZE in main.cpp das extern weg. Da wohnt sie dann und überall sonst ist sie eben extern.


  • Mod

    Lymogry schrieb:

    ganz viele Fehler wegen ARRAYSIZE ......

    Die du uns nicht vorenthalten solltest (jedenfalls nicht den ersten).
    Die Fehlermeldung dürfte dahingehend lauten, dass ARRAYSIZE kein konstanter Ausdruck sei.
    Ein Ausdruck, der auf eine const-qualifizierte Variable verweist, ist nur dann ein konstanter Ausdruck, wenn die Variable zuvor mit einem konstanten Ausdruck initialisiert wurde.
    Andererseits würde eine Initialisierung bei einer nicht-lokalen Variable die Deklaration automatisch in eine Definition verwandeln, was zum Problem wird, sobald die Variable in mehreren ÜEs verwendet werden soll.
    Schlussfolgerung: nicht-lokale Konstanten mit externer Bindung sind als Templateparameter ungeeignet.
    Wahrscheinlich besteht aber auch gar keine Notwendigkeit, dieser Konstante externe Bindung mitzugeben.



  • asfsdf schrieb:

    mit vorbehalt:

    in main.cpp:
    gar nichts, komplett weg.

    in header.hpp:
    so wie es atm ist.

    in header.cpp:
    extern weg, sonst so wie es ist.

    Das geht leider nicht.

    Nimm ARRAYSIZE in main.cpp das extern weg. Da wohnt sie dann und überall sonst ist sie eben extern.

    Das geht auch nicht. 😞

    So wie ich das verstanden habe, sind die Vorschläge möglich, wenn es kein const ist. 😕



  • Ok. Also hier ist der Fehler
    http://s1.directupload.net/images/131205/omabzy86.png

    Bei der Kompilierung die ganz oben im Eingangsthread steht.

    Camper schrieb:

    Schlussfolgerung: nicht-lokale Konstanten mit externer Bindung sind als Templateparameter ungeeignet.
    Wahrscheinlich besteht aber auch gar keine Notwendigkeit, dieser Konstante externe Bindung mitzugeben.

    Hallo Camper. 🙂
    Leider versteh ich noch nicht, was nun zu tun ist ... 🙂


  • Mod

    Lymogry schrieb:

    asfsdf schrieb:

    mit vorbehalt:

    in main.cpp:
    gar nichts, komplett weg.

    in header.hpp:
    so wie es atm ist.

    in header.cpp:
    extern weg, sonst so wie es ist.

    Das geht leider nicht.

    Lymogry schrieb:

    Camper schrieb:

    Schlussfolgerung: nicht-lokale Konstanten mit externer Bindung sind als Templateparameter ungeeignet.
    Wahrscheinlich besteht aber auch gar keine Notwendigkeit, dieser Konstante externe Bindung mitzugeben.

    Hallo Camper. 🙂
    Leider versteh ich noch nicht, was nun zu tun ist ... 🙂

    Ich auch nicht, da ich nicht weiss, welchen Beschränkungen eine potentielle Lösung genügen muss.



  • In den Header (ich meine nicht den Dateinamen) kommt

    const int ARRAYSIZE=10;
    

    in die anderen Dateien nichts.



  • Beschränkungen?
    Ein Array fester Größe soll in mehreren geteilten Headern verfügbar sein. (Ich sortiere meine Fkten gerade nach Outout Header, Algorithmus Header, Input Header usw.)

    Eigentlich hab ich ein 2D Array. Das will ich aber nicht 2D speichern, sondern nur 1D (<int, ARRAYSIZE*ARRAYSIZE>) und mit ARRAYSIZE*y+x durchlaufen.
    Also bin ich sehr dadran interessiert, diese Größe überall verfügbar zu haben. 🙂



  • manni66 schrieb:

    In den Header (ich meine nicht den Dateinamen) kommt

    const int ARRAYSIZE=10;
    

    in die anderen Dateien nichts.

    Hallo Manni,

    so siehts danach aus:
    http://s1.directupload.net/images/131205/5nerkl3e.png

    (das versteh ich nun gar nicht mehr)
    😕



  • Lymogry schrieb:

    so siehts danach aus:
    http://s1.directupload.net/images/131205/5nerkl3e.png

    (das versteh ich nun gar nicht mehr)
    😕

    Warum steht da noch extern?



  • ups!!!
    Ok, ohne klappts! 🙂

    Und funktioniert das zufällig auch, wenn ich mehrere header1 header2 habe .. 😕
    (so ist das Ursprungsproblem!) 🙂



  • Ja, solche Konstanten haben implizite internal linkage, heißt du bekommst keine Probleme wegen doppelten Definitionen wenn der Header mehrmals eingebunden wird.



  • Vielen Dank euch allen!

    Es funktioniert. 🙂


Anmelden zum Antworten