Scope probleme



  • Hi! Vor 7 Jahren habe ich ein Anteigetaffelprogramm geschrieben. Teilweise habe ich routinen von dem Buch (Astribomie mit dem Personal Computer) verwendet. Zusätzlich habe ich noch einige mir relevanten routine, und selbstverständlich das Main programm geschrieben, mit CODEBLOCKS unter Win7 64, und MFC wurde auch verwendet. Nach 8 Jahren wollte ein kleinigkeit dazufügen. Zwar meine system ist längst anders, ich habe von dem Sourcen eine Projeckt gebildet, und noch ohne die Modifizierungen habe die Object gebildet. Dabei bekomme ich die folgende Error: "R_z was not declared in this scope" (in Mat3D). Dabei es ist aufgelistet in der Header von Mat3D class als friend Funcion. Ich bin schon völlig verzweifelt, insbesonders, weil sowohl die Mat3D class, wie die routine (Kepler) wo diese Fehler auftritt sind teile von die original Source Packet!
    die Error:https://www.dropbox.com/s/6rqsuclxuca43ib/build error.png?dl=0
    und die Header:https://www.dropbox.com/s/xaaseca97rfb2fa/header.png?dl=0
    Ich wäre alle Hilfe dankbar!


  • Mod

    Nun, der Code ist falsch. Was soll man mit dem, was du gezeigt hast, noch mehr sagen? Welche Art von Hilfe erwartest du?

    Dabei es ist aufgelistet in der Header von Mat3D class als friend Funcion.

    Jemanden als deinen Freund zu benennen, setzt weder voraus, dass dieser Jemand existiert, noch macht es, dass dieser Jemand danach notwendigerweise existiert.



  • #include <iostream>
    
    //struct A x();
    
    struct A
    {
        friend A x();
        void f() { x(); };
    
    private:
        int b;
    };
    
    
    
    int main()
    {
        A a;
    
        a.f();
    
        x();
    }
    
    A x() {A a; a.b = 42; return a;}
    
    

    Das wird mit VS 2008 übersetzt, VS 2019 liefert 'x': identifier not found.

    Lösung: siehe die auskommentierte Zeile.


  • Mod

    Abgefahren. Auf godbolt bekomme ich es aber auch mit msvc 19.22 übersetzt. Das ist doch die Version hinter VS 2019, oder? @manni66 : Hast du den tatsächlichen Übersetzungsvorgang getestet oder nur, ob sich die IDE beschwert?



  • @SeppJ

    Ich habe es übersetzt. Ein neues Projekt wird in VS 2019 allerdings mit /permissive- angelegt. Das ist ja genau der Schalter, mit dem MS endlich C++ kompatibel werden möchte. Ohne den Schalter geht es auch in VS 2019.


  • Mod

    @manni66 sagte in Scope probleme:

    Ich habe es übersetzt. Ein neues Projekt wird in VS 2019 allerdings mit /permissive- angelegt. Das ist ja genau der Schalter, mit dem MS endlich C++ kompatibel werden möchte. Ohne den Schalter geht es auch in VS 2019.

    @Jichok: Demnach wäre der Workaround für dich, dass du diesen Schalter deaktivierst. Solange MSVC abwärtskompatibel zu seinen alten Sünden bleibt, kannst du damit überleben. Falls du einen gänzlich anderen Compiler nutzt, wirst du den Code korrigieren müssen, denn er ist schlicht falsch und funktionierte nur aufgrund der Nachlässigkeit eines uralten Compilers.



  • @SeppJ Ich nütze, und damals auch nützte CODEBLOCKS, und wie geschrieben habe diese Codeschnippsel stammt von die gekaufte Astronomische Programmpacket von 1993, das damals mit der selben IDE (villeicht eine frühere version) tadellos funktionierte. Alle meine code sind (noch) unverändert. Die R_X exsistiert sehr wohl in VecMat3D beschrieben. https://www.dropbox.com/s/rswytu7yqgw6kcw/APC_VecMat3D.cpp?dl=0 https://www.dropbox.com/s/ho7x2kft2jqzd8h/APC_VecMat3D.h?dl=0


  • Mod

    Code::Blocks ist eine IDE, das sagt erst einmal nichts über den benutzten Compiler. Hier benutzt du der Fehlermeldung nach den GCC, welcher das halt niemals schlucken wird, egal was du tust. Mag sein, dass du damals etwas anderes benutzt hat, oder dass ein GCC von 1993 das anders gemacht hat (wobei der GCC aber eigentlich immer recht penibel und standardtreu war), aber heute wirst du das nur noch mit dem msvc und speziellen Schaltern übersetzt bekommen. Siehe oben. Da Code::Blocks wie gesagt unabhängig vom Compiler ist, ist es durchaus möglich, dort auch den MSVC einzusetzen. Mag aber nicht ganz einfach sein, das einzurichten, wenn man sich nicht auskennt.

    Du hast also mehrere Optionen:

    1. MSVC installieren, einrichten, und mit den entsprechenden Parametern benutzen. Nachteil: Nicht ganz einfach. Vorteil: Anleitungen dafür sollten googelbar sein.
    2. Den Code korrigieren. Vorteil: Sehr einfach, wenn man sich auskennt. Nachteile: Quasi unmöglich, wenn man die Sprache nicht richtig versteht. Außerdem kann man dir nur schwer via Ferndiagnose helfen.
    3. Einen GCC von 1993 installieren und hoffen. Vorteil: Es wäre eine interessante Herausforderung. Nachteil: Es wäre eine interessante Herausforderung.

    Für alle gilt, dass das auch eventuell nur der erste, einfache Fehler ist und du danach eventuell einfach nur den nächsten finden wirst, sobald der erste verschwunden ist.



  • @Jichok: In welcher Zeile der Datei "APC_VecMat3D.cpp" erhältst du denn den Fehler (denn auf R_z wird dort ja nirgends zugegriffen)? Oder wird schon im Header ""APC_VecMat3D.h" darauf zugegriffen?



  • @SeppJ Danke für die ausführliche und konstruktive antworten! Ich glaube ,das mir bleibt nichts anders übrig, dass anstatt MinGw eine andere compiler installiere, oder ich mich diese astronomische programme durchackere und dementsprechend modifizere. Noch mal danke für deine Hilfsbereitschaft.


  • Mod

    Wenn du jemanden vor Ort hast, dem du live diese gekauften Programme zeigen kannst, der sich mit C++ auskennt, dann würde ich das zuerst versuchen. Denn es könnte sein, dass man nur 1-2 Zeilen ändern muss. Wahrscheinlich ein paar fehlende Includes. Aber von hier aus im Forum dürfte es schwer sein, das aus der Ferne genauer zu bestimmen.



  • @Th69 Die Fehler erhalte in einer andere (Kepler) routine wo die header von VecMat3D includiert. Dass das Leben nicht so einfach sein soll, es giebt andere routine die, diese Funktion erkennen! Total rätselhaft! https://www.dropbox.com/sh/fie7rknojhss959/AAB9kqFTmWY01TrpS_J5WrdOa?dl=0



  • @SeppJ Wenn das der Fall wäre, hätte ich nicht da geschrieben, aber danke. Die includes waren die erste die ich kontrollierte. Wie ich für TH69 geschrieben habe, diese Funktion (R_z) wurde anderswo auch genutzt, aber bloss da spielt verrückt.


  • Mod

    @Jichok sagte in Scope probleme:

    @SeppJ Wenn das der Fall wäre, hätte ich nicht da geschrieben, aber danke. Die includes waren die erste die ich kontrollierte. Wie ich für TH69 geschrieben habe, diese Funktion (R_z) wurde anderswo auch genutzt, aber bloss da spielt verrückt.

    Es werden halt vor der Fehlerstelle entsprechende Includes fehlen, die an der anderen Stelle sichtbar sind. C wird in vollständig getrennten Einheiten (pro Datei) und strikt von oben nach unten übersetzt. Falls in irgendeiner anderen Datei oder an irgendeiner späteren Stelle kein Fehler auftritt, dann hat das nichts damit zu tun, ob an der Fehlerstelle der Fehler auftritt oder nicht. An der Stelle zählt nur, was in dieser Datei weiter oben alles passiert ist.



  • @SeppJ Ich habe deinen "Rat" gefollgt, und G.s.D. habe ich eine CD von 2009 gefunden mit damalige IDE ung MINGW. Nun lauft es wieder. jetzt, mit einem anderen Programm habe ich eine scheinbar unbegreifliche Fehler: https://www.dropbox.com/s/ejriwr8f520w013/not a name a type.PNG?dl=0 . Was zum Kuckuck soll dass sein?


  • Mod

    Das ist jetzt aber Code von dir, oder?

    Allgemein sind Bilder denkbar ungünstig um bei Problemen mit Code zu helfen. Besser: Hier den Abschnitt lesen, wie man den richtigen Code postet.



  • @Jichok sagte in Scope probleme:

    Was zum Kuckuck soll dass sein?

    Zeilen 19 und 20 ersetzten durch

    HFONT myfont = CreateFont(18, 8, 0, 0, 800, 0, 0, 0, HEBREW_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "Times New Roman");
    


  • @SeppJ Klar von mir! danke f0r deine hilfe, aber ich werde erst morgen, also einige stunde später ausprobieren, F0r die jedem klar sehbahre codepostung danke ich extra. sehr sehr hilfsreich! Danke euch in der Fore°! jetzt aber mir schlafen angesagt 😞



  • @SeppJ Besonders dir, aber auch dem anderen hilfsbereiten möchte ich meine Dank aussprechen! Wie gesagt (implicit), schon einige Jahre habe ich keine programme (heute nennt man die wohl Apps) geschrieben, und jetzt bei neu Installazionen (SIC Mehrzahl), mit der ich versuchte mit verschiedene versionen, haben sie solche kaos, trotz deutliche Zuweisungen in der IDE , in der registrie verursacht habe, das alle klare zeile wurde von der MinGW falsch verstanden. Auf meine Laptop (anstatt meine Desktop), installierte eine jungfräuliche system und ide mit compiler, und nun alles viel klarer, und programmierer freundlicher.. Nun in der Zukunft, muss man ins Betracht ziehen, dass noch irgendwas deinstallieren die cclean lass man auch nachsehen, dass was noch in der Registrie geblieben,Ich habe mich gewundert, wenn von codeblock die zahlreiche fehlerhafte einträge gesehen habe. Ausser dem, wass ich leider gottes nicht in kenntniss genommen habe, dass die verschiedene c++ versionen (11-17), und dementsprechend die MinGW-s, ein wenig anders sind mit STRING variablen, die bei mir vesentliche rolle spielen. Also noch mal danke, und, ich hoffe, dass in der Zukunft bloss wirklich nur mit programmtechnische problemen melde, und nicht mit solche kaos in der registrie problemen!


Log in to reply