Anfänge mit Visual Studio 2008



  • Antispy schrieb:

    Wie könnte ich es denn sonst inkludieren?

    der compiler compiliert selber schon beide cpp-dateien. und der linker fügt die beiden compilate dann zusammen. dadurch wird dann in der ausführbaren datei alles beisammen sein. es besteht also keine not, da was zu inkludieren.
    durch "extern" sagst du dem compiler "lieber compiler, es folgt eine variablendeklaration für eine variable, die in einer anderen cpp-datei angelegt ist. mach mir jetzt keinen ärger und mecker nicht. der linker wird's richten."



  • main.cpp:

    ...
    int main(array<System::String ^> ^args)
    {
    extern int b_costs[2][2][2];
    ...
    

    building_costs.cpp:

    #include "stdafx.h"
    
    int b_costs[2][2][2];
    b_costs[1][1][1] = 90;
    

    Hier bekomm ich nun diese Fehlermeldung:

    .\building_costs.cpp(36) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    .\building_costs.cpp(36) : error C2369: 'b_costs': Neudefinition; unterschiedliche Feldindizes
    .\building_costs.cpp(3): Siehe Deklaration von 'b_costs'
    .\building_costs.cpp(36) : error C2440: 'Initialisierung': 'int' kann nicht in 'int [1][1][1]' konvertiert werden
    Es gibt keine Konvertierungen von Arraytypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Arrays gibt
    Code wird generiert...



  • zeig auch mal die zeile 36 und die zeile davor.



  • #include "stdafx.h"
    
    int b_costs[2][2][2]; // <-- Zeile 3
    b_costs[1][1][1] = 90; // <-- Zeile 36
    

    Dazwischen liegen nur Kommentare und dahinter nichts mehr.



  • Antispy schrieb:

    #include "stdafx.h"
    
    int b_costs[2][2][2]; // <-- Zeile 3
    b_costs[1][1][1] = 90; // <-- Zeile 36
    

    Dazwischen liegen nur Kommentare und dahinter nichts mehr.

    komisch. der code sieht für mich ganz ok aus.
    ups,
    die zuweisung
    b_costs[1][1][1] = 90;
    geht ja gar nicht im global scope.

    int b_costs[2][2][2]; // <-- Zeile 3
    void init_costs()
    {
       b_costs[1][1][1] = 90;
    }
    
    void init_costs();//diese zeile könnte fein in einen header gehen, der einfachheit halber aber mal schnell so
    int main()
    {
       init_costs();
    ...
    }
    


  • Ich habe nun mal alle Kommentare entfernt und nun sieht meine building_costs.cpp folgendermaßen komplett aus (Zeile 1-5):

    #include "stdafx.h"
    
    int b_costs[2][2][2];
    
    b_costs[1][1][1] = 90;
    

    Die Fehlermeldung ist folgende:

    Kompilieren...
    building_costs.cpp
    .\building_costs.cpp(5) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    .\building_costs.cpp(5) : error C2369: 'b_costs': Neudefinition; unterschiedliche Feldindizes
    .\building_costs.cpp(3): Siehe Deklaration von 'b_costs'
    .\building_costs.cpp(5) : error C2440: 'Initialisierung': 'int' kann nicht in 'int [1][1][1]' konvertiert werden
    Es gibt keine Konvertierungen von Arraytypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Arrays gibt



  • Antispy schrieb:

    Ich habe nun mal alle Kommentare entfernt und nun sieht meine building_costs.cpp folgendermaßen komplett aus (Zeile 1-5):

    Schau dir nochmal volkard's letzten Post an.



  • ohh.. hatte gar nicht gesehen, dass das editiert wurde.

    Das scheint aber soweit zu klappen 🙂

    Jetzt versuche ich bei einem Onklick eines Buttons den Wert eines Labels zu ändern:

    Label1->Text=b_costs[1][1][1];
    

    hier bekomm ich jetzt aber leider folgende Fehldermeldung:

    error C2065: 'b_costs': nichtdeklarierter Bezeichner



  • Was mich komisch dünkt, ist dass der Borland Builder das durchgehen lässt...



  • Antispy schrieb:

    ohh.. hatte gar nicht gesehen, dass das editiert wurde.

    Das scheint aber soweit zu klappen 🙂

    Jetzt versuche ich bei einem Onklick eines Buttons den Wert eines Labels zu ändern:

    Label1->Text=b_costs[1][1][1];
    

    hier bekomm ich jetzt aber leider folgende Fehldermeldung:

    error C2065: 'b_costs': nichtdeklarierter Bezeichner

    int main(array<System::String ^> ^args) 
    { 
    extern int b_costs[2][2][2];
    

    hatte ich nicht so gedacht, sondern eher

    extern int b_costs[2][2][2]; 
    int main(array<System::String ^> ^args) 
    {
    

    ich vermute, dein
    Label1->Text=b_costs[1][1][1];
    ist nicht in der main()

    kannst auch
    extern int b_costs[2][2][2];
    in jede funktion klatschen, wo es gebraucht wird. also als erste zeile in die OnClick()



  • Der Code für den Button befindet sich in der Form1.h

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 b_main_wood->Text=b_costs[1][1][1];
    }
    

    b_main_wood ist dabei der Name des Labels.



  • private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                                extern int b_costs[2][2][2]; 
    			 b_main_wood->Text=b_costs[1][1][1];
    }
    

    dürfte klappen.



  • kannst auch
    extern int b_costs[2][2][2];
    in jede funktion klatschen, wo es gebraucht wird. also als erste zeile in die OnClick()

    Da erscheint dann diese Meldung:

    Form1.h(2571) : error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)': Konvertierung des Parameters 1 von 'int' in 'System::String ^' nicht möglich
    Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    Es ist keine Standardkonvertierung von der mittels Boxing geschachtelten Form des arithmetischen Typs in den Zieltyp vorhanden.



  • ich kenne die richtigen funktionen nicht, aber

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
       extern int b_costs[2][2][2]; 
       System::String^ str;
       str += b_costs[1][1][1];
       b_main_wood->Text=str;
    }
    

    geht, wenn ich http://heifner.blogspot.com/2007/02/int-to-string-under-managed-c.html recht verstehe.
    vielleicht ist

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
       extern int b_costs[2][2][2]; 
       b_main_wood->Text=System.Convert.ToString(b_costs[1][1][1]);
    }
    

    netter.



  • Das ist genial!!
    Das funktioniert super!! 🙂

    Vielen Dank für die nette und super schnelle Hilfe so spät abends 🙂

    Wünsche noch einen schönen Abend und guten Rutsch ins neue Jahr 🙂


Anmelden zum Antworten