Function Problem



    1. Man kann Arrays nichts zuweisen, das dürfte so nicht durch den Compiler gehen.
    2. Deine Variablen sind static, haben also interne Bindung. In main.cpp und funktionen.c gibt es also jeweils einen eigenen Satz dieser Variablen, und das ist der Grund, dass du die Änderungen in der main nicht siehst.


  • Bashar schrieb:

    In main.cpp und funktionen.c gibt es also jeweils einen eigenen Satz dieser Variablen, und das ist der Grund, dass du die Änderungen in der main nicht siehst.

    Sollte man dann static Variablen immer in .c Source-Dateien definieren und nie im Header?



  • static ist eine art primitiver datenkapselungsmechanismus, von daher wird wohl meistens die verwendung im header nicht das gewünschte resultat liefern. prinzipiell wäre das aber kein fehler, und wenn dir eine situation einfällt, in der du dieses verhalten brauchst...

    (ps: dass static durch anonyme namespaces abgelöst werden soll, deutet diesen verwendungszweck ebenfalls an.)



  • queer_boy schrieb:

    wenn dir eine situation einfällt, in der du dieses verhalten brauchst...

    http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Nifty_Counter



  • für strings in c++ std::string und nicht char*



  • Also static Variablen gelten, wenn man sie in dem Modul als global deklariert, nur in diesem Modul, obwohl sie global deklariert sind? Und wenn man in einer Funktion eine Variable static deklariert, dann ist sie zwar lokal, wird aber, wenn man die Funktion verlässt, nicht zerstört, behält also quasi ihren Speicherbereich noch?

    Ist das das Einzige was static bringt?



  • schließlich gibt es noch statische klassenvariablen/funktionen, die dann für alle instanzen dieselben sind.



  • kk habe ja gesagt noob frage 😛
    schon lange nicht mehr programmiert..

    naja jetzt dann ne frage:

    also wie soll ich das machen ..

    ich möchte eine function die mit

    DWORD WINAPI GetPrivateProfileString(
      __in   LPCTSTR lpAppName,
      __in   LPCTSTR lpKeyName,
      __in   LPCTSTR lpDefault,
      __out  LPTSTR lpReturnedString,
      __in   DWORD nSize,
      __in   LPCTSTR lpFileName
    );
    

    daten aus einer ini datei ließt

    habe in main.cpp
    nur den aufruf der funktion laden und dann gibt der das aus also

    #include "windows.h"
    #include "function.h"
    ...
    ...
    ...
    lesedateiaus();
    cout << blabla1[] << testtaa[] << muuuuh[];
    ...
    ...
    ...
    

    ind function.h habe ich die arrays deklariert(und die function halt)

    #include <iostream>
    
    extern char blablal[20]; //muss ne größe angeben für function später
    extern char testtaa[20];
    extern char muuuuh[20];
    
    void lesedateiaus();
    

    dann in function.c die funktion halt.

    #include "windows.h"
    #include "function.h"
    
    lesedateiaus(){
    GetPrivateProfileString("test","array1","Error",blablal,sizeof(blablal),"C:\\test.ini");
    //das dann noch für die anderen arrays
    GetPrivateProfileString("test","array2","Error",testtaa,sizeof(testtaa),"C:\\test.ini");
    GetPrivateProfileString("test","array2","Error",muuuuh,sizeof(muuuuh),"C:\\test.ini");
    }
    

    also das ist jetzt falsch...
    aber wie könnte ich es """professionell""" lösen?^^

    Mfg NOOB ^^



  • weiß das keiner? o.o

    ka wie ich das machen soll



  • Was funktioniert denn nicht (Compilerfehler, Laufzeitfehler, falsche Rückgabewerte)?

    P.S. Dies ist dann eher eine Frage für das WinAPI-Forum...



  • da kommt das ich die variable nicht deklariert habe ...



  • Dann deklariere sie doch, wo ist da das Problem?

    btw, wenn sich der Linker beschwert, liegt es vermutlich an einer fehlenden Definition - dem reicht der extern-Eintrag im Header nämlich nicht aus. Da mußt du am Anfang der "funktion.c" noch die Definitionen ergänzen.



  • bekomme jetzt ganz oft so einen error :

    [Linker error] undefined reference to `variablen_name'
    

    also füre jede variable 2-3 mal
    denke ma pro aufruf oder so.

    Mfg NOOB ^^



  • omg geschaft ^^ sry xD
    mega noob einfach zu faul gewesen sorry


Anmelden zum Antworten