Module - Nameskonflikt

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Module - Nameskonflikt

Beitrag von STARGÅTE »

Hallo,

ich möchte mich nun auch mal etwas näher mit den Modulen befassen, doch gleich zu Anfang kommt ein Problem, von dem eigentlich gesagt wird, dass es Verhindert werden soll: Namenskonflikt

Wenn ich zB ein Modul definieren möchte was im Speicher liest und schreibt, dann hätte ich es gerne so gemacht:

Code: Alles auswählen

Memory::WriteFloat(Memory, Float)
Nur leider kann ich die Procedure garnicht definieren, weil es dann einen Konflikt mit der File-Lib gibt (WriteFloat).

Wenn ich nun aber doch wieder Memory_WriteFloat() definieren muss, dann bringt mir auch das Modul nichts.
Ober gibt es eine möglichkeit eine Procedure gleich mit dem Modulnamen zu definieren?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Module - Nameskonflikt

Beitrag von PMV »

Das hat Danilo schon zu beginn im englischen Forum angemerkt:
http://www.purebasic.fr/english/viewtop ... =3&t=56574


Kurz gesagt, Namenskonflikte mit PB-Befehlen bleiben. Egal ob Modul oder nicht.
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Module - Nameskonflikt

Beitrag von NicTheQuick »

Wenn man ein bisschen trickst, geht es zumindest so:

Code: Alles auswählen

DeclareModule Memory
	Declare PokeF_(*memory, float.f)
	Macro PokeF(memory, float)
		Memory::PokeF_(memory, float)
	EndMacro
EndDeclareModule
Module Memory
	Procedure PokeF_(*memory.Float, float.f)
		Debug "test"
		*memory\f = float
	EndProcedure
EndModule

Define test.f = 0.0

PokeF(@test, 1.0)

Debug test

Memory::PokeF(@test, 1.0)

Debug test
Bei der anderen Variante, die ich mir überlegt habe, kommt allerdings ein merkwürdiger Fehler:

Code: Alles auswählen

DeclareModule Memory
	Declare PokeF_(*memory, float.f)
	Macro PokeF(memory, float)
		Memory::PokeF_(memory, float)
	EndMacro
EndDeclareModule
Module Memory
	UndefineMacro PokeF
	Procedure PokeF_(*memory.Float, float.f)
		Debug "test"
		PokeF(*memory, float)
	EndProcedure
EndModule

Define test.f = 0.0

PokeF(@test, 1.0)

Debug test

Memory::PokeF(@test, 1.0)

Debug test
Antworten