[C++]Pointer bei Header-Dateien

DeChecka

Erfahrenes Mitglied
Wenn ich in einem Projekt in der main.cpp Pointer auf bestimmte Variablen verwende, müsste ich diese doch auch im Sourcecode von anderen cpp-Dateien dieses Projekts verwenden können... oder nicht?
Zumindest müsste es aber umgekehrt gehen, oder? Also in einer cpp-Datei, die zu einer Header gehört, Pointer verwenden und diese dann nach Einbindung der bestimmten Header auch in der main.cpp verwenden...

Allerdings das bei mir leider net... :-)

An was kann das liegen?

MfG
DeChecka
 
moin


Das geht auch bei mir nicht ;)

Du könntest die Pointer global initialisieren, aber das ist auch nicht so das wahre...
Auf Pointer die in anderen Funktionen sind, bekommst du keinen Zugriff.

Was hast du denn überhaupt vor?


mfg
umbrasaxum
 
Könntest static Variablen nutzen, und direkt den Wert von der Main in die Varialbe deiner Klasse schreiben, wenn du mit Klassen programmierst.

Gruss

MFC OpenGL
 
@MFC OpenGL: Hmm, mit static-Variablen kenn ich mich nicht aus...

@Tobias K.: Ich will nur Variablen aus Sourcecode einer Header in anderen Sourcecodes des Projekts verwenden... Und eben zur Abwechslung mal das Deklarieren mit "extern" usw... umgehen... ;)

Geht das also so gar nicht mit Pointern?
Weil das hat mir irgendjemand mal gesagt, dass das möglich wäre...

MfG
DeChecka
 
Hi.

Also Pointer sind auch nur Variablen. Vielleicht wäre ein Beispiel nicht schlecht, damit man besser weiß was du meinst (hab da so grad meine Schwierigkeiten).
 
Hm, also folgendes funktioniert bei mir einwandfrei (ist jetzt zwar C, aber sollte egal sein):

header.h
Code:
#ifndef _HEADER_H_
#define _HEADER_H_

int *pInt;

#endif //_HEADER_H_
foobar.c
Code:
#include "header.h"

void foobar()
{
	*pInt = 1234;	
}
main.c
Code:
#include <stdlib.h>
#include <stdio.h>
#include "header.h"

void foobar();

int main(int argc, char *argv[])
{
	pInt = (int *)malloc(sizeof(int));
	
	foobar();
	printf("%d", *pInt);
	
	free(pInt);
	
	return 0;
}

Gibt wie erwartet „1234“ aus.

Oder meintest du etwas anderes?
 
Matthias Reitinger hat gesagt.:
Hm, also folgendes funktioniert bei mir einwandfrei (ist jetzt zwar C, aber sollte egal sein):
Nein, das ist nicht egal. Weil es nämlich in C++ illegal ist eine Variable mehrfach zu definieren.

In ANSI C ist das OK solange die Variablen vom gleichen Typ sind, in unterschiedlichen Modulen definiert werden und höchstens eine Variable initialisiert ist. Beim Linken werden die Symbole aus den unterschiedlichen Modulen zu einer Entität zusammengeführt.

Beim GCC kann man dies allerdings auch mit dem "-fno-common" Schalter verhindern und bekommt dann den gleichen Linker-Fehler wie mit C++.
 
moin


Das Problem löst er doch durch
Code:
#ifndef _HEADER_H_
#define _HEADER_H_

........

#endif //_HEADER_H_
?!


mfg
umbrasaxum
 
Nein, denn die Header Datei wird jeweils in der Datei foobar.c als auch in main.c eingebunden. Da die beiden Dateien getrennt voneinander kompiliert werden befinden sich in den daraus resultierenden Objekt-Dateien 2 Definitionen (/edit: also insgesamt 2, in jeder Datei eine) der Variable pInt.
 
moin


Ach, darauf wolltest du hinaus.
Aber ja du hast recht, ich weiss nicht ob das in C geht, aber in C++(bzw. mit nem C++ Kompiler) gehts nicht.


mfg
umbrasaxum
 
Zurück