Problem mit List und vektoren
-
Die Deklaration des Antwort Konstruktors ist noch falsch:
Antwort(string aw);
Antwort(String^ aw);
Und auch using namespace System; nicht vergessen.
Edit
Und auch hier: Dafür kannst Du using namespace std getrost entfernen.
-
Hey, genau dass habe ich in der Zeit schon gemacht als du geschrieben hast ^^
Die Klasse sieht nun so aus.#pragma once #include "StdAfx.h" using namespace System; namespace Correctus { ref class Antwort { private: String^ antwort; bool^ sichtbar; public: Antwort(String^ aw); void abgehackt(); String^ getAntwort(); void setAntwort(String^ aw); }; }
und nun folgen die fehler. haben sich im übrigen schon sehr verringert.
bleiben nur noch die aus der klasse und ei, aus der form über, welche sehr sehr viele sind. ^^Fehler:
c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\AntwortDaten.h(13): error C3845: "Correctus::AntwortDaten::antworten": Nur statische Datenmember können innerhalb einer Verweisklasse oder eines Werttyps initialisiert werden.
Prüfung.cpp
c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\AntwortDaten.h(13): error C3845: "Correctus::AntwortDaten::antworten": Nur statische Datenmember können innerhalb einer Verweisklasse oder eines Werttyps initialisiert werden.
-
C++/CLI ist halt weder C++ noch C#, sondern eine eigene Sprache mit eigenen Regeln.
Laut Fehlermeldung mußt du
antworten = gcnew List<Antwort^>(6);
in den Konstruktor reinschreiben (also hier verhält es sich mehr wie C++).
-
und warum ist das dann so??? ich versteh das grad nicht, warum das so ist. kann es sein, dass die definierung immer außerhalb einer funktion sein muss und die deklaration in dem konstruktor? hab jetzt lustigerweise nur noch Fehler in der Form1.h . Auf jedenfall schonmal ein gaaaanz GROOOOßES Danke
-
Das mit den gcnew im Konstruktor wird auch benötigt, würde aber ein Fehler zur Laufzeit verursachen. Soweit bist Du noch nicht.
Bei Dir ist es ein Kompilerfehler.
Du benötigst eine Instanz von AntwortDaten um Antworten etc. hinzufügen zu können. Vermutlich versuchst Du sowas wue AntwortDaten->antworten->Add(gcnew Antwort()); zu machen. Das geht nicht. Du benötigst eine Instanz von AntwortDaten.
Zeige doch mal den Code wo die Antwort und AntwortDaten Klassen verwendet werden.
-
#pragma once namespace Prüfung { #include "AntwortDaten.h" using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Drawing::Imaging; using namespace System::Collections::Generic; /// <summary> /// Zusammenfassung für Form1 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Image ^img; List<AntwortDaten^> ^faecher; Form1(void) { InitializeComponent(); faecher = gcnew List<AntwortDaten^>();
das ist der Kopf der Form1.h und die Fehler zu dem Bereich, sind Folgende.
c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(22): error C2065: 'AntwortDaten': nichtdeklarierter Bezeichner
c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(22): error C2059: Syntaxfehler: '>'
c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(25): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(28): error C2061: Syntaxfehler: Bezeichner 'AntwortDaten'Ich denke, der Rest baut sich darauf auf. Die Deklaration sollte eigentlich am richtigen Punkt stehen, oder?
hab den Aufruf glatt vergessen. der ist auch in der Form1.h :private: System::Void pruefungAuswaehlenToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { faecher->Add(gcnew AntwortDaten()); }
-
theta schrieb:
Das mit den gcnew im Konstruktor wird auch benötigt, würde aber ein Fehler zur Laufzeit verursachen. Soweit bist Du noch nicht.
Bei Dir ist es ein Kompilerfehler.
Du benötigst eine Instanz von AntwortDaten um Antworten etc. hinzufügen zu können. Vermutlich versuchst Du sowas wue AntwortDaten->antworten->Add(gcnew Antwort()); zu machen. Das geht nicht. Du benötigst eine Instanz von AntwortDaten.
Zeige doch mal den Code wo die Antwort und AntwortDaten Klassen verwendet werden.
Naja, Ich versuch mal mein Projekt zu abstrahieren. Es soll eine Embedded Software werden. Nächstes Jahr aber erst. Ich bastel jetzt die Vorab Standalone Version. Die Andere Firma, die die Software braucht, wird sie dann einbetten. Das ist an der Stelle nicht mein Problem. Ich soll erstmal eine Lauffähige Version bauen. Die Antworten etc werden dann nächstes Jahr als XML vorliegen. und diese werden dann auch verwendet. Ich hab diese Klassen erstmal als nötig erachtet, da ich das Programm ja irgendwie testen muss. Dafür hab ich dann diese Beiden Klassen eingebaut damit ich Testdaten benutzen kann.
Aber keine Angst, Ich werd in den kommenden 2 Monaten (solange dauert mein Praktikum noch) noch öfter auf euch zurück kommen müssen, da ich die Stifteingabe (tablet PC) noch integrieren muss, ein Overlay basteln muss, welches die schrift als objekt behandelt usw... hab noch nen ganzen haufen Probleme, die ich lösen muss. ^^ werd aber natürlich versuchen soweit alles alleine zu machen wie ich es bisher kann...
-
Das include der AntwortDaten.h muss raus aus dem Namespace.
Edit:
Ausserdem musst Du aufpassen, Du hast einmal Namespace Prüfung (da ist Form1 drin) und einmal den Namespace Correctus (Antwort und AntwortDaten).
-
hab ich mir auch schon gedacht. löst das Problem aber nicht. Hab das Include jetzt über dem namespace und unter dem #pragma once
AntwortDaten ist immernoch ein nichtdeklarierter Bezeichner . Fehler ist immernoch bei der definition. also im public bereich unter image.
-
Aj2010 schrieb:
hab ich mir auch schon gedacht. löst das Problem aber nicht. Hab das Include jetzt über dem namespace und unter dem #pragma once
AntwortDaten ist immernoch ein nichtdeklarierter Bezeichner . Fehler ist immernoch bei der definition. also im public bereich unter image.Ja, es ist immer noch unbekannt, weil es im globalen Namespace und im Namespace Prüfung keine Klasse AntwortDaten gibt.
Mache am einfachsten (nicht am besten) using namespace Correctus; unter all die andern usings (in Form1.h).
-
ahhhhh. jetzt hats klick gemacht. also wenn ich zwei verschiedene Namespaces hab, dann kann der das gar nicht wissen, wo ich die daten her beziehe... toll es läuft. aber mit ner warnung ^^ RIESEN DANKE an euch Daran hab ich mich gestern schon fest gebissen Is jetzt nur noch die Frage, wie ich die Ordnerstruktur aufbaue. Es können sehr viele Dateien werden DAAAAANKE ^^
-
Aj2010 schrieb:
ahhhhh. jetzt hats klick gemacht. also wenn ich zwei verschiedene Namespaces hab, dann kann der das gar nicht wissen, wo ich die daten her beziehe... toll es läuft. aber mit ner warnung ^^
Und was ist die Warnung? Und was heisst "läuft".. heisst das bei Dir "kompiliert"?
-
is kompiliert und hat gestartet. er erstellt auch die list. *mega freu*
das war nur ne warnung wegen der Sichtbarkeit, da es noch public war.