Hallo allerseits!
Ich habe eine struct Blah, die in main() deklariert ist. Des weiteren definiere ich oberhalb von main() eine Funktion int dings(Blah* irgendwas); als Prototyp. Damit der Compiler Blah* schluckt, habe oberhalb der Deklaration von dings(...) einen weiteren Prototyp: struct Blah;.
Nun ist der Compiler unzufrieden: Beim Aufruf von:
heisst es: cannot convert 'main():Blah*' to 'Blah*' for argument '1' to 'int dings(Blah*)'.
Ich hab da wohl was gebastelt und muss nun den Preis bezahlen. Wie krieg' ich das jetzt sauber hin?
lg
Kalsan
Zuletzt geändert von kalsan am 1. August 2014 16:16, insgesamt 1-mal geändert.
Etwas mehr Code wäre hilfreich aber deine beiden Struktruen Blah und main()::blah sind für den Compiler unterschiedliche Strukturen - die eine im globalen Namespace, die andere im Namespace von main()
struct Block;
struct WfEBlock;
int wfeToClauseBuffer(WfEBlock* currentWfE); // Nur Prototyp, Funktion ist noch nicht implementiert.
int main()
{
struct Block{
int id;
};
struct WfEBlock:Block{
list<Block*> blockList;
};
WfEBlock* rootBlock = new RootBlock; // Build up root
if(!wfeToClauseBuffer(rootBlock)){cout<<"Error 0"<<endl; return EXIT_FAILURE;}
}
wie Christian81 schon gesagt hat, sind die "struct Blah" die du in main() deklariert und definiert hast, sowie die "struct Blah" die du *außerhalb* von main() (forward-)deklariert hast, zwei verschiedene Dinge.
Die eine struct heißt für den Compiler "main():Blah" und die andere einfach nur "Blah".
Deine Funktion erwartet einen Pointer auf eine struct vom Typ "Blah", du übergibst aber einen Pointer vom Typ "main():Blah".
Kurz gesagt: Eine struct die in einer Funktion deklariert/definiert wurde kann außerhalb dieser Funktion nicht benutzt werden. Übrigens hat das zur Folge, dass eine solche struct auch nicht als Template Parameter herhalten kann (d.h. "list<Blah>" geht nur wenn Blah außerhalb von main() existiert).
Ziehe deine struct also aus main() raus, dann sollte es gehen.
Ach so. Alle structs inkl. Inheritance raus. Mein Fehler beim Pröbeln war, dass ich nur gewisse structs rausgenommen habe und daher eine Vervielfachung der Fehlermeldungen erzielte.
Nun ist alles klar. Vielen Dank!
lg, Kalsan