conflicting types for "function"

Ich komme aus Java und da bin eích es gewohnt
Code:
Brett spielbrett = new Brett();
zu sagen aber einen solchen Befehl hab ich in C jetz nicht gefunden ^^
also hab ich einfach angenommen, dass der Kompiler das einach weiß.

Aber wenn ich spielbrett zu einer instanz mache und die "->" zu "." mach habe ich den
selben fehler o_O?

Danke für die Lektüre ...
 
Und wie hast du es zu einer Instanz gemacht?
Einfach den Stern weg.

Zum new:
In Java muss man ja überall außer bei den Grundtypen int/float... zuerst ein new machen.
Es gibt also vergleichsweise zu C nur Pointer, außer eben bei den Grundtypen.

Was es in Java nicht gibt, dass man komplexe typen auch einfach so wie int anlegen kann.
C++:
Brett spielbrett; //ohne new
in C eben
C++:
struct Brett spielbrett;

Das Javamäßige
C++:
Brett spielbrett = new Brett();
wäre in C++
C++:
struct Brett *spielbrett = new Brett();
Wenn man reines C ohne ++ haben will kann man aber nicht new schreiben,
sondern etwas umständlicher:
C++:
struct Brett *spielbrett = malloc(sizeof(Brett));
(malloc und new sind nicht ganz gleich, in dem Fall aber schon)

Und noch ein sehr wichtiger Unterschied zu Java:
Man muss sich in C/C++ selbst drum kümmern, dass malloc/new-angelegte Variablen
wieder entfernt werden. Kein GC vorhanden.
Bei malloc mit free, bei new mit delete.
 
Bezüglich Zeigern gibt es kein "sinnvoll" und "ab wann". In der entsprechenden Situation ergibt sich das von alleine ob du die Adresse des Objekts oder das Objekt selber ansprechen willst. Klar gibt es gewisse Killerkriterien, aber die sind soweit selbstverständlich:
- Wenn ein Objekt länger als nur den Scope in dem es erstellt wird leben soll kommst du um Zeiger nicht herum, da du sie auf dem Heap erstellen musst und da erhälst du immer einen Zeiger zurück
- Wenn du Kopien bei Funktionsaufrufen verhindern willst kommst du um Zeiger nicht herum.

Gerade das zweite dürfte für jemanden der aus Java kommt ungewohnt sein, denn in Java bist du dir vermutlich folgendes gewohnt:
Java:
public void foo(Bar bar) {
      bar.foobar = 2;
}

Bar bar = new Bar();
bar.foobar = 3;
foo(bar);
// bar.foobar == 2

In C ist es jedoch so:
C:
void foo(struct Bar bar) {
      bar.foobar = 2;
}

struct Bar bar;
bar.foobar = 3;
foo(bar);
// bar.foobar == 3

Die Frage ist jedoch warum du von Java ausgerechnet auf C umsteigst und nicht auf C++. In C++ musst du dich nicht mehr mit Pointern rumschlagen.

Grüsse
Cromon
 
weil ich im Studium (was ich jetzt begonnen habe), C lernen muss und
auch die Prüfung im 1. Semester in C schreibe ^^

Aber zu meinem Problem, ich habe nun
Code:
struct Brett spielbrett;
und alle "->" zu "." geändert ... aber habe immer noch das
selbe Problem
Code:
Segmentation Fault

Ich habe auch schon
Code:
struct Brett *spielbrett;
...
...
...

void init_Spielbrett()
{
spielbrett=(struct Brett *)malloc(sizeof(struct Brett)); 
...
...
...
}
mit "->" statt "." Versucht
aber auch da der Fehler

Code:
Segmentation Fault

o_O?
 
bei
Code:
spielbrett.a=A;
in init_Spielbrett()
wenn ich
Code:
struct Brett spielbrett;
verwende ohne malloc(..);

Wenn es ein Pointer ist,
bekomme ich dieses
Code:
Segmentation Fault
im übrigen bei dem malloc(...) bereits,
ist das normal?
 
Was auf jeden Fall schon sicher ein Problem ist, dass du noch immer unitialisierte Zeiger verwendest, nämlich diesen hier:
C:
struct Dame *damen;

als Teil der Spielbrett-Struktur.
 

Neue Beiträge

Zurück