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:
Alles anzeigen
die zugerhörige Headerdatei random.h:
Alles anzeigen
Hier werden die Prototypen der Funktionen dekleriert ... dabei befindet sich jede Funktion in einem anderen namespace
(ist so gefordert )
Nun die Dazugehörige main:
Alles anzeigen
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
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:
Quellcode
- #include <ctime>
- #include<iostream>
- unsigned long a;
- unsigned long m=32768;
- unsigned long b=9757;
- unsigned long c=6925;
- unsigned long rand(unsigned long b, unsigned long c) // rand berechnet Zufallszaheln nach der Lineraren Kongurenz methode
- {
- a = time(0);
- unsigned long rand;
- rand= (((a *b)+c) % m);
- return rand;
- }
- unsigned long doublerand() // doublerand soll einen zufallswert im intervall zwischen [0,1) wählen .... Ist aber nicht richtig das ist mir bewusst
- {
- unsigned long f=1, h=4194301, t=2147483647, z =b;
- z=(f+h * z)%t;
- return z % rand(b,c);
- }
die zugerhörige Headerdatei random.h:
Quellcode
Hier werden die Prototypen der Funktionen dekleriert ... dabei befindet sich jede Funktion in einem anderen namespace
(ist so gefordert )
Nun die Dazugehörige main:
Quellcode
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