Class fehler + Dir holen

06/14/2014 16:43 Terrat#1
Hallo,
ich habe 1 Problem und 1 Frage.

Problem:
Ich habe eine Klasse
player.h
Code:
class Player{
	float PositionX;
	public:
		int SetPositionX(float);
		float GetPositionX();
};

int Player::SetPositionX(float Set_PositionX)
{
	Player::PositionX=Set_PositionX;
	return 0;//Succes
}
float Player::GetPositionX()
{
	return PositionX;
}
Die ich wie folgt aufrufe
Code:
Player pplayer;
	pplayer.SetPositionX(0.1);
	float pos=pplayer.GetPositionX();
	if(pos=0.5)
	{
		MessageBox(NULL,"Position Erfolgreich gesetzt","",NULL);
	}
Warum kommt die MsgBox immernoch obwohl die Position ja nicht 0.5 ist?

2 Frage:

Wie kriege ich das Verzeichnis der Exe da ich in ein Unterferzeichnis möchte.
06/14/2014 16:53 Ende!#2
Code:
if(pos=0.5)
->
Code:
if(pos==0.5)
Edit: Davon ab macht es bei Settern übrigens meistens wenig Sinn 'nen Wert zu returnen, wenn dann lieber auf Exceptions setzen (falls du schon so weit bist).
06/14/2014 17:12 Terrat#3
Quote:
Originally Posted by Ende! View Post
Code:
if(pos=0.5)
->
Code:
if(pos==0.5)
Edit: Davon ab macht es bei Settern übrigens meistens wenig Sinn 'nen Wert zu returnen, wenn dann lieber auf Exceptions setzen (falls du schon so weit bist).
Könntest du mir mal ein Beispiel an einer Klasse zeigen steige mit dem Exeptions noch nicht durch ?
Das hier verstehe ich noch net so ganz:
[Only registered and activated users can see links. Click Here To Register...]
06/14/2014 17:13 snow#4
Quote:
Originally Posted by Dreamsläps View Post
Wie kriege ich das Verzeichnis der Exe da ich in ein Unterferzeichnis möchte.
[Only registered and activated users can see links. Click Here To Register...]
06/14/2014 17:31 Schlüsselbein#5
Wobei [Only registered and activated users can see links. Click Here To Register...] zu bevorzugen wäre.
06/14/2014 17:53 Terrat#6
Quote:
Originally Posted by snow911 View Post
[Only registered and activated users can see links. Click Here To Register...]
Hab mal was versucht zu basteln funktioniert aber net?
Dir.h
Code:
#include <stdio.h>

void SubDir(LPTSTR Subdir)
{
LPTSTR NPath = NULL;
GetCurrentDirectory(MAX_PATH,NPath);
lstrcat(NPath,Subdir);
SetCurrentDirectory(NPath);
}
void DirClear()
{
LPTSTR NPath = NULL;
GetCurrentDirectory(MAX_PATH,NPath);
SetCurrentDirectory(NPath);
}
Aufruf:
Code:
	SubDir(TEXT("\\_resources\\Font"));
        ......
	DirClear();
Hat zur folge das das Programm crasht.


Code:
Problemsignatur:
  Problemereignisname:	APPCRASH
  Anwendungsname:	Spiel.exe
  Anwendungsversion:	0.0.0.0
  Anwendungszeitstempel:	539c6f20
  Fehlermodulname:	ntdll.dll
  Fehlermodulversion:	6.1.7601.18247
  Fehlermodulzeitstempel:	521ea8e7
  Ausnahmecode:	c0000005
  Ausnahmeoffset:	00036a65
  Betriebsystemversion:	6.1.7601.2.1.0.768.3
  Gebietsschema-ID:	1031
  Zusatzinformation 1:	0a9e
  Zusatzinformation 2:	0a9e372d3b4ad19135b953a78882e789
  Zusatzinformation 3:	0a9e
  Zusatzinformation 4:	0a9e372d3b4ad19135b953a78882e789

Lesen Sie unsere Datenschutzbestimmungen online:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0407

Wenn die Onlinedatenschutzbestimmungen nicht verfügbar sind, lesen Sie unsere Datenschutzbestimmungen offline:
  C:\Windows\system32\de-DE\erofflps.txt
06/14/2014 18:14 snow#7
Code:
LPTSTR NPath = NULL;
GetCurrentDirectory(MAX_PATH,NPath);
lstrcat(NPath,Subdir);
SetCurrentDirectory(NPath);
in NULL passt ziemlich viel rein, aber ich würde den Zeiger dennoch auf gültigen Speicher zeigen lassen. Du speicherst Dateien doch auch nicht in /dev/null, weil da alles reinpasst?

Die DirClear-Methode wird auch nicht funktionieren.
06/14/2014 18:35 Schlüsselbein#8
Code:
std::string get_app_path()
{
	std::vector<char> vec(MAX_PATH, 0);
	DWORD length = ::GetModuleFileName(NULL, &vec[0], vec.size());

	return std::string(std::begin(vec), std::begin(vec) + length);
}
Falls der Pfad auch zu lang werden kann, noch GetLastError und den Rückgabewert mit einbeziehen und den Buffer dynamisch vergrößern.

Soll nur mal den Ansatz zeigen.
06/15/2014 12:42 Delinquenz#9
Quote:
int SetPositionX(float);
In der Regel gibt ein Setter keinen Wert zurück. Wenn du auf Erfolg des Settens überprüfen möchtest, dann gib eine Variable des Typs bool zurück. Andernfalls hast du früher oder später mit etlichen Enums als Rückgabewerten zu tun, was das Ganze nicht unbedingt übersichtlicher macht.