PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler: in Konflikt stehende Typen für »vektor«



Gsus
31-12-2005, 18:01
Hallo

ich schreibe da ein Programm wofür ich ein Paar structs bräuchte...

aber eine header-Datei lässt sich beim besten willen nicht kompellieren.




#include <stdio.h>
#include <stdlib.h>

typedef struct {
double x;
double y;
double z;
}vektor;



wenn ich dann mein Programm kompeliere kommt diese Fehler Meldung


myvektor.h:13: Fehler: in Konflikt stehende Typen für »vektor«
myvektor.h:13: Fehler: vorherige Deklaration von »vektor« war hier


ich weiss einfach nicht mehr weiter für hilfe wie immer dankbar

mfg

gsus

peschmae
31-12-2005, 18:21
Was soll der Code denn genau?

MfG Peschmä

Gsus
31-12-2005, 18:29
Hallo danke fürs lesen und antworten

naja er soll einen Vektor mit x,y,z machen also einen Vektor im Euklidischen VektorRaum

mfg

Gsus

pucki
01-01-2006, 11:42
und welches ist die zeile 13 im header file???

gruesse und ein gutes Neues Jahr

Gsus
01-01-2006, 21:09
sorry habe die kommentare weggelassen, es ist die letzte, aber es hat sich glaube ich erledigt, wenn ich die headerfile in einem anderen Programm mit einfüge compeliert er es mir (der fehler muss wo anders liegen).

ich hätte aber eine andere frage kann ich struct als return wert defieneren wenn ich es mache (es ist das struct oben) sagt er mir inkompatible Typen ?? wenn nicht muss ich es halt callbyrefernz machen aber mit callbyvalue würde ich mich wohler fühlen

danke für die antworten

mfg gsus

peschmae
01-01-2006, 21:23
Klar kannst du so ein Struct als Return-Value verwenden. Einfach so halt wie bei allem anderen auch.

Wenn was nicht geht wärs noch gut wenn du (kompilierfähigen) Code mit dem Problem posten könntest...

MfG Peschmä

Gsus
03-01-2006, 07:44
Hallo

hier der naja nicht compelierbare Code wegen Fehlern ;)

vektor.h



#include <stdio.h>
#include <stdlib.h>

typedef struct vektor{
double x;
double y;
double z;
}vektor;


vektorMath.c


#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "vektor.h"

vektor addVek(vektor,vektor);
vektor mulVek(double, vektor);

vektor addVek(vektor A, vektor B)
{
vektor C;
C.x = A.x + B.x;
C.y = A.y + B.y;
C.z = A.z + B.z;

return C;
}

vektor mulVek(double a, vektor B){
vektor C;
C.x = a*B.x;
C.y = a*B.y;
C.z = a*B.z;

return C;
}


main.c


#include <stdlib.h>
#include <stdio.h>
#include "vektor.h"

int main (){

vektor V;
V.x=1.0;
V.y=2.0;
V.z=3.0;

vektor R;
R.x = 1.0;
R.y = 2.0;
R.z = 3.0;

vektor Z;
Z = addVek(R,V);
}



und wenn ich so dann compeliere:

gcc -o main main.c vektorMath.c -lm

so folgt:


main.c: In function 'main':
main.c:19: Fehler: inkompatiple Typen in Zuweisung


wobei Zeile 19: Z=addVek(....
ist

mfg Gsus

PS: Das Problem zu Anfang habe ich auch noch nicht hinbekommen aber denn Code kann ich nicht hinzufügen ... Weil zu viel da hängt noch sehr viel OpenGL mit dran..

Boron
03-01-2006, 08:49
typedef struct vektor{
double x;
double y;
double z;
}vektor;Ich habe nie verstanden wofür der Bezeichner "vektor" nach einem "typedef struct" gut sein soll. Eigentlich sollte ein
typedef struct {
double x;
double y;
double z;
}vektor;reichen.

[Hier stand vor der Änderung ein Satz, der so blöd war, weil ich mit Blindheit geschlagen war, dass er einfach weg musste.]

peschmae
03-01-2006, 08:54
Wenn du main.c mit der Option -Wall kompilierst wirts schon klarer:


peschmae@sid:/tmp$ gcc -Wall -c main.c -o main.o
main.c: In Funktion »main«:
main.c:18: Warnung: implizite Deklaration der Funktion »addVek«
main.c:18: Fehler: inkompatible Typen in Zuweisung
main.c:19: Warnung: Kontrollfluss erreicht Ende einer Nicht-void-Funktion


d.h. du musst natürlich die Funktionen die du in vectorMath.c definierst auch in vektor.h deklarieren sonst kennt der die in main nicht.

Gsus
03-01-2006, 14:36
danke das hat alles gelöst

der andere Fehler wurde dadurch auch klar, ich musste erst das struct definieren und dann die funktionen ;)

danke

mfg

gsus

Gsus
03-01-2006, 15:15
Hallo

so da ich zwar jetzt alles compelieren kann aber immer noch nicht (vielleicht nie ) fertig bin wollte ich wenigstens mal zeigen woran ich arbeite... tada

es compeliert ( naja wenn man Opengl und glut drauf hat ) mit make und es ist von mir :D

falls jemand verbesserungs vorschläge hat bitte her damit. Die zwei Planeten
in der mitte haben eigentlich auch eine Texture aber die konnte ich wegen der beschränkten datei größe jetzt nich mit anhängen ( ausserdem hat mein ibook unter linux keine 3dBeschleunigung weshalb ich es ausgeschaltet habe )

mfg gsus