Include Problem????



  • c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(464): warning C4677: "addToFaecher": Die Signatur des nicht privaten Members enthält den privaten Assemblytyp "Correctus::AntwortDaten".
    c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\AntwortDaten.h(9): Siehe Deklaration von 'Correctus::AntwortDaten'
    c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(460): error C2065: 'Pruefung_hinzufuegen': nichtdeklarierter Bezeichner
    c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(460): error C2065: 'zeigePruefung_hinzufuegen': nichtdeklarierter Bezeichner
    c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(460): error C2061: Syntaxfehler: Bezeichner 'Pruefung_hinzufuegen'
    c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(461): error C2065: 'zeigePruefung_hinzufuegen': nichtdeklarierter Bezeichner
    c:\users\ajacobs\documents\visual studio 2010\projects\prüfung\prüfung\Form1.h(461): error C2227: Links von "->ShowDialog" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    Typ ist ''unknown-type''

    das sind die fehlermeldungen.

    die warnung kann ich ja getrost überlesen vorerst. das problem bestand auch schon vorher. das schlimme ist, das programm hats so schon getahn und auf einmal nicht mehr...

    das is der kopf:
    #pragma once
    #include "stdafx.h"
    #include "AntwortDaten.h"
    #include "Pruefung_hinzufuegen.h"
    namespace Correctus {
    
    	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
    	{......
    
    und das, die problemsteelle:
    
    System::Void neuePruefungenHinzufuegenToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    			 Pruefung_hinzufuegen^ zeigePruefung_hinzufuegen = gcnew Pruefung_hinzufuegen();
    			 zeigePruefung_hinzufuegen->ShowDialog();
    		 }
    
    public:	 void addToFaecher(AntwortDaten^ neuePruefung) {
    			 faecher->Add(neuePruefung);
    		 }
    };
    }
    

    hab das mal eben mit auskommentieren der funktion probiert und es sind immernoch die probs da. der erstellt mitmal einfach die zweite form nicht mehr...



  • 1. StdAfx.h soll nur in CPP Dateien includiert werden.
    2. Also, Schritt für Schritt:

    error C2065: 'Pruefung_hinzufuegen': nichtdeklarierter Bezeichner

    - Header inkludiert? Ja.
    - Ist der gefragte Typ tatsächlich in diesem Header File definiert?
    - Ist der gefragte Typ ev. in einem andern Namespace?
    - Liegt ev. ein Schreibfehler vor?
    - ...



  • theta schrieb:

    1. StdAfx.h soll nur in CPP Dateien includiert werden.
    2. Also, Schritt für Schritt:

    error C2065: 'Pruefung_hinzufuegen': nichtdeklarierter Bezeichner

    - Header inkludiert? Ja.
    - Ist der gefragte Typ tatsächlich in diesem Header File definiert?
    - Ist der gefragte Typ ev. in einem andern Namespace?
    - Liegt ev. ein Schreibfehler vor?
    - ...

    also, ums kurz zu machen,
    - header includiert
    - definitiv keine schreibfehler, da es genau SO funktioniert hat und ich nichts mehr dran geändert habe außer die funktion in der 1. form zu schreiben und die funktion in der 2. form (pruefung_hinzufuegen.h) zu ändern, damit das array befüllt wird. das ist ja mein problem grad. ich seh keinen fehler. Gerade weil es schon genau SO funktioniert hat bei dem ersten test als ich das ganze erstellt hatte.



  • #pragma once
    #include "stdafx.h"
    #include "AntwortDaten.h"
    #include "Form1.h"
    #include <iostream>
    using namespace std;
    namespace Correctus {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	/// <summary>
    	/// Zusammenfassung für Pruefung_hinzufuegen
    	/// </summary>
    	public ref class Pruefung_hinzufuegen : public System::Windows::Forms::Form
    	{
    	public:
    		Pruefung_hinzufuegen(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    ...
    

    das is die header. namespace hab ich auch erst gedacht, dann schreibweise und dann referenz. aber is ja nichts verändert worden...



  • So, Du hast eine zirkuläre Abhängigkeit der Headerfiles erzeugt:

    Form1.h inlkudiert Pruefung_hinzufuegen.h inkludiert Form1.h ...

    Benötigt Pruefung_hinzufuegen das Form1.h Headerfile?

    Falls es wirklich so ist löst man das typischerweise mit Vorwärtsdeklaration.



  • eine was hab ich erzeugt????
    naja, ich muss in der form2 ein array aus form 2 verändern, ich muss die prüfungen dem array hinzufügen, danach dann die entsprechende prüfung auswählen und dann antworten hinzufügen. ist etwas umständlich, aber geht in der vorabversion nicht anders. is aber noch nich alles implementiert. Das Array befindet sich in der Form1.h, und ist dann ja von form2 aus nicht erreichbar, wenn ich das nich gegenseitig includiere, aber müsste sich das nicht eig ausschalten, durch das #pragma once? das ist doch dafür da sowas zu verhindern... oder nicht? 😕



  • Aj2010,

    du scheinst die grundlegendsten Dinge von C++ noch nicht zu beherrschen und willst dann schon GUI programmieren, geschweige denn C++/CLI.

    theta, dass du dir das hier antust... (ich glaube, das wird hier selber ein Thread mit zirkulären Abhängigkeiten 😉



  • 🕶

    theta, dass du dir das hier antust... (ich glaube, das wird hier selber ein Thread mit zirkulären Abhängigkeiten 😉

    Das glaube ich allerdings auch langsam..



  • eine was hab ich erzeugt????

    Google doch danach.

    Du kannst z.B. das besagte Array (besser Liste) ja via Konstruktor von Pruefung_hinzufuegen übergeben. So wird es direkt bearbeitet.

    Dann entfällt die Abhängigkeit nach Form1.

    Simon



  • problem ist, ich hab mit java angefangen, dann mit c# gearbeitet und nun muss ich in kürzester zeit c++ intus bekommen und die software schreiben. was ne zirkuläre abhängigkeit is hab ich ne vorstellung, und zwar, dass beide voneinander abhängen. und zwar immer und immer wieder. kann auch sein, dass ich gestern müde war. warte mal, mir is da grade was über die zeiger eingefallen. ich brauch ja eigentlich nur nen zeiger zu dem adressblock des arrays nehmen um mein problem zu umgehen. müsste dann ja das problem lösen, da ich ja ein und das selbe objekt behandel und kein neues. nun wird mir auch klar wofür man überhaupt einen zeiger auf ein objekt mitgeben sollte... weil ich hab da keinen sinn drin gesehen. schon bei c# nicht... 😉
    wäre das ne möglichkeit? und ich hab jetzt mal ne frage... lässt mich ein wenig dumm da stehen aber ich wurde eben beim lesen über zeiger verwirrt, kann mir mal einer den unterschied zwischen '^', '*', '&' nennen?

    '*' soll ein zeiger darstellen und '&' eine referenz, aber was ist mit '^'? is das sowas wie nen zeiger?

    edit 10:43Uhr : So, Programm läuft, mit zeigern auf das ursprüngliche objekt... und nein, ich weiß weder warum das auf einmal funktioniert, noch warum gerade diese zeichen verwendet wurden.
    weg ist folgender.

    public ref class Form1 : public System::Windows::Forms::Form
    	{
    	private:
    		List<AntwortDaten^> ^faecher;
    	private: System::Windows::Forms::ToolStripMenuItem^  neuePruefungenHinzufuegenToolStripMenuItem;
    	public:
    		Image ^img;
    
    		Form1(void)
    		{
    
    			InitializeComponent();
    			faecher = gcnew List<AntwortDaten^>();
    ...
    ->
    System::Void neuePruefungenHinzufuegenToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    			 Pruefung_hinzufuegen^ zeigePruefung_hinzufuegen = gcnew Pruefung_hinzufuegen(faecher);
    			 zeigePruefung_hinzufuegen->ShowDialog();
    		 }
    ...
    ->
    public ref class Pruefung_hinzufuegen : public System::Windows::Forms::Form
    	{
    		List<AntwortDaten^> ^faecher;
    	public:
    		Pruefung_hinzufuegen(List<AntwortDaten^> ^fach)
    		{
    			InitializeComponent();
    			faecher = fach;
    ...
    ->
    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    				 if(textBox1->Text !="" && textBox2->Text != "" && textBox3->Text != "") {
    					 String^ pruefungsFach = textBox1->Text;
    					 String^ sem = textBox2->Text;
    					 String^ pruefungsName = textBox3->Text;
    					faecher->Add(gcnew AntwortDaten(pruefungsFach, sem, pruefungsName));
    				 }
    ...
    

    Ich hab keine ahnung warum das funktioniert... aber es funktioniert. ^^ kann mir wer erklären warum welcher zeiger /welche referenz an der stelle richtig ist? *lieb guck*



  • ok, ich hab die bedeutungen, aber kann es sein, dass ich so wie es grad einen höher steht gar nicht das originalobjekt bearbeite sondern einfach eine kopie? ich kann mir das derzeit nicht ausgeben lassen. könnt ihr was dazu sagen? laut buch von stroustrup ist ja * der zeiger und & eine referenz auf ein objekt.
    '^' ist ein handlebares objekt. kann mir einer das bestätigen oder zumindest sagen ob ich nun das originalobjekt behandel oder nur eine kopie aufn stack gelegt hab?



  • laut buch von stroustrup ist ja * der zeiger und & eine referenz auf ein objekt.

    Schau mal, das verdeutlicht doch nur wieder, dass C++/CLI für Anfänger nicht geeignet ist. Das Buch von Stroustup behandelt C++, kein C++/CLI.

    Benutz doch einfach C# oder meinetwegen VB.NET. Oder wenns denn umbedingt sein muss C++ - aber lass die Fniger von C++/CLI.

    Simon



  • ja, dass das buch für mfc is, weiß ich ja schon mittlerweile. ich hab aber dummerweise keine wahl als mich mit c++ cli auseinander zu setzen. ich bin hier in der firma der einzige, der anwendungsentwicklung macht/lernt. der rest ist itk oder fisi. der chef is der einzige, der c++ kann. und der hat dummerweise viele termine... was sich auf mein nützliches lernen aussschlägt. daher hab ich mich beim forum angemeldet...
    zudem hab ich auch nen zeitproblem. ich hab bis ende februar noch das praktikum, und anfang februar muss ich den prüfungsantrag abgeben. und bis ende februar muss die softwar zumindest soweit stehen, dass sie benutzbar ist, damit ich der kommission was zeigen kann...



  • Du schnallst das nicht...

    Wenn dein Chef C++ kann und keine Zeit für Dich hat ist das völlig in Ordnung, denn Du benötigst jmd. der C++/CLI kann.

    Und ich bezweifle stark, dass das Buch von Stroustrup für MFC ist. Es ist ganz einfach für C++ - im besten Fall kommt noch das Gui Toolkit FTLK darin vor.

    Warum glaubst Du eigentlich, dass Du C++/CLI machen musst?
    Hast Du die Forderung nicht einfach falsch verstanden / ausgelegt und eigentlich war C++ gemeint?

    Simon



  • also, die aussage von meinem chef war folgende. ich soll das programm schreiben mit c++. visual studio premium lässt du dir vom support geben. das Programm soll NUR mit win 7 und .Net 4.0 arbeiten können. hab ich da irgendwas falsch dran verstanden, dass ich dann c++/cli machen muss?



  • Du hast doch geschrieben, daß du schon C# kannst. Warum mußt du das Programm dann unbedingt mit C++ erstellen? Überzeug deinen Chef davon, daß C# für ein GUI-Programm einfach besser ist und dann schaffst du das auch bis Ende Februar und brauchst dich nicht mit Zeigern, Includes etc. rumärgern!

    Und C++ lernst du nur, wenn du auch C++ (ohne CLI !) programmierst und das am besten für die ersten paar Monate nur mit Konsolenprogrammen...
    Nach einem halben Jahr kann man sich dann mal langsam ein paar GUIs (wie z.B. Qt oder wxWidgets) anschauen.



  • ja, ich hab 3 monate intensiv mit c# gearbeitet. gibt da aber noch einen punkt, der später wichtig wird. das soll wenns auf win 7 ohne probs läuft auch für linux und mac aufbereitet und abgeändert werden. ich weiß nicht wie die das machen wollen, darum muss ich mich glücklicherweise nicht kümmern) die software wird noch embedded. ich mach nur die vorab standalone variante, welches dann von dem hauptentwickler eingebettet wird. die entsprechenden änderungen machen die dann. das soll ne embedded tablett-pc software werden. daher auch im nachhinein für andere OS.

    Und ich glaub nicht wirklich dass C# dann für Mac oder Linux geeignet ist. (ich hab bisher nur mit windows gearbeitet...)



  • Th69 schrieb:

    Und C++ lernst du nur, wenn du auch C++ (ohne CLI !) programmierst und das am besten für die ersten paar Monate nur mit Konsolenprogrammen...
    Nach einem halben Jahr kann man sich dann mal langsam ein paar GUIs (wie z.B. Qt oder wxWidgets) anschauen.

    Naja, das Problem ist, dass sowas mich nicht heraus fordert. Ich bin ein sehr sehr schnell lernender mensch. ich bin für informationen quasi wie ein schwamm.
    Heißt ich langweile mich sehr schnell, wenns nicht kompliziert genug ist. Die Ansprüche die mein chef stellt sind ok so. Nur, da ich ja C++(inkl. CLI) anfänger bin, brauch ich bissl unterstützung. Und aus den Fehlern lern ich ja. Bei mir gestaltet sich die fehlersuche aber etwas schwieriger, da ich eine Krankheit habe, die das Logische FEHLER SUCHEN beeinträchtigt. Meine logische Denkweise ist laut diversen Tests weit übern durchschnitt. Ich bin nur laut meinen Ärzten eingeschränkt was das Fehler beheben angeht.

    Mir fällt es nicht mehr so leicht auf, aber wenn es mir aufgefallen ist und ich dazu gelernt habe, dann sitzt es auch sofort. das war schon immer so...



  • 🙄

    also, die aussage von meinem chef war folgende. ich soll das programm schreiben mit c++. visual studio premium lässt du dir vom support geben. das Programm soll NUR mit win 7 und .Net 4.0 arbeiten können. hab ich da irgendwas falsch dran verstanden, dass ich dann c++/cli machen muss?

    Ja, da hast Du was falsch verstanden. Mit Visual Studio kann sowohl native (C++) als auch managed (C++/CLI) programmiert werden.

    Naja, das Problem ist, dass sowas mich nicht heraus fordert. Ich bin ein sehr sehr schnell lernender mensch. ich bin für informationen quasi wie ein schwamm.

    🙄

    So, das war mein letzer Post in diesem Thread.


Anmelden zum Antworten