Funktionen Auslagern C++ (nicht aufgelöste Verweise)

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Funktionen Auslagern C++ (nicht aufgelöste Verweise)

    Hallo Coder Community!

    Ich möchte gerade einen Zufallsgenerator schreiben der die lineare Kongruenzmethode verwendet das ganze soll modular geschehen
    das heißt die Funktionen die die eigetnlichen Zufallszahlen Berechnen werden ausgelagert und später über einen Header in die Main eingebunden.


    Das ist meine random.cpp hier werden die Funktionen deklariert:

    Source Code

    1. #include <ctime>
    2. #include<iostream>
    3. unsigned long a;
    4. unsigned long m=32768;
    5. unsigned long b=9757;
    6. unsigned long c=6925;
    7. unsigned long rand(unsigned long b, unsigned long c) // rand berechnet Zufallszaheln nach der Lineraren Kongurenz methode
    8. {
    9. a = time(0);
    10. unsigned long rand;
    11. rand= (((a *b)+c) % m);
    12. return rand;
    13. }
    14. unsigned long doublerand() // doublerand soll einen zufallswert im intervall zwischen [0,1) wählen .... Ist aber nicht richtig das ist mir bewusst
    15. {
    16. unsigned long f=1, h=4194301, t=2147483647, z =b;
    17. z=(f+h * z)%t;
    18. return z % rand(b,c);
    19. }
    Display All


    die zugerhörige Headerdatei random.h:

    Source Code

    1. #ifndef random
    2. # define random
    3. #include<iostream>
    4. extern unsigned long a;
    5. extern unsigned long m=32768;
    6. extern unsigned long b=9757;
    7. extern unsigned long c=6925;
    8. namespace randkong
    9. {
    10. unsigned long rand(unsigned long b, unsigned long c);
    11. }
    12. namespace randinter
    13. {
    14. unsigned long doublerand();
    15. }
    16. #endif
    Display All


    Hier werden die Prototypen der Funktionen dekleriert ... dabei befindet sich jede Funktion in einem anderen namespace
    (ist so gefordert )

    Nun die Dazugehörige main:

    Source Code

    1. #include <iostream>
    2. #include "random.h"
    3. int main()
    4. {
    5. std::cout << "Funktion rand()\n";
    6. std::cout <<randkong:: rand(b,c)<<"\n";
    7. std::cout<< "Funkiton doublerand()\n";
    8. std::cout<< randinter :: doublerand()<<"\n";
    9. system("pause");
    10. }
    Display All


    hier werden die Funktionen einfach aufgerufen und es werden zufallszahlen auf dem Bildschirm ausgegeben

    Nun habe ich aber das problem das die Variablen aus random.cpp Modulglobal sein sollen (müsste so stimmen oder ?) deshalb werden sie im header auch als extern bekannt gegeben. Nur bei der Compilierung spuckt mir der
    Compiler die Fehler meldung entgegen :

    "Verweis auf nicht aufgelöstes externes Symbol unsigned long __cdecl randinter::doublerand(void)"
    und
    Verweis auf nicht aufgelöstes externes Symbol ""unsigned long __cdecl randkong::rand(unsigned long,unsigned long)"

    Heißst doch das er nichts mit meinem Funktionen bzw meinen Variablen Anfangen kann oder ? Was mach ich denn nun Falsch ?

    Es wäre cool wenn ihr mir auch nochmal den sinn von namensräumen Erklären könntet ? Das war zur vermeidung von Mehrfach Dekleration oder ?

    PS.: Meine Variablen sind modul Global heißt sie können von jeder funktion im Modul gesehn werden wenn ich aber zb in die zweite funktion in random.cpp also " unsigned long doublerand();" static variablen deklariere können diese nur von der funktion " unsigned long doublerand();" gesehn werden ist das so richtig ?

    Viele Grüße und Danke im Vorraus