Anfänge mit c++ || Array aus Klassen
-
Hallo liebe c++ Menschen!
Ich habe mich versucht mit Hilfe eines Buches in C++ einzulesen und versuche jetzt mit Hilfe von Klassen eine Adjazenzliste einzulesen.
Leider haben die Probleme nicht lange auf sich warten lassen.Da hat sich bei mir direkt ein garstiger Fehler eingeschlichen der mein Lückenhaftes Verständnis offenbart.
Vielleicht möchte mir jemand sagen wie man sowas realisiert, und besonders warum man es so realisiert?Edge1 ist meine Klasse.
Edge1 *c = new Edge1[10];
Ich weiß noch nicht so viel von Konstruktoren und so, vielleicht liegt es ja daran.
Vielen Dank für jeden Kommentar
-
Stell konkrete Fragen. Ich habe keine Ahnung, was du genau tun möchtest und wobei du Schwierigkeiten hast. Bloß dass eine Klasse namens Edge1 vorkommt, was so gut wie gar keine Information ist.
Ich kann dir aber sagen, dass wenn du new auf ein Array, noch dazu mit statischer Größe, anwendest, dann sind gleich mehrere Dinge nicht richtig. Und zwar erstens new auf ein Array (std::vector hätte dem gegenüber keine Nachteile, aber viele vorteile) und zweitens new und statische Größe (warum dann nicht gleich statisches Array oder std::array?).
-
Die obere Zeile ist aus der main.cpp
Vielleicht ist es noch Edge1.h und Edge1.cpp sinnvoll zu posten.Edge1.h:
#include<iostream> #include<vector> #include<cmath> #pragma once ref class Edge1 { public: //============ Standardkonstruktor Edge1(void); // Hier sollte noch ein Kopierkonstruktor hin um Laufzeit zu optimieren //============ öffentliche Methoden int get_Knotena(); int get_Knotenb(); int get_Kantengewicht(); int get_Kantenindex(); void set_Knotena(int tmp); void set_Knotenb(int tmp); void set_Kantengewicht(int tmp); void set_Kantenindex(int tmp); private: //============ Attribute int Knotena; int Knotenb; int Kantengewicht; int Kantenindex; }; inline int Edge1::get_Knotena(){ return Knotena;} inline int Edge1::get_Knotenb(){ return Knotenb;} inline int Edge1::get_Kantengewicht(){ return Kantengewicht;} inline int Edge1::get_Kantenindex(){ return Kantenindex;} inline void Edge1::set_Knotena(int tmp){ Knotena = tmp;} inline void Edge1::set_Knotenb(int tmp){ Knotenb = tmp;} inline void Edge1::set_Kantengewicht(int tmp){ Kantengewicht = tmp;} inline void Edge1::set_Kantenindex(int tmp){ Kantenindex = tmp;}
Edge1.cpp
#include "Edge1.h" #include<vector> #include<cmath> Edge1::Edge1(void) { Knotena = 0; Knotenb = 0; Kantengewicht = 0; Kantenindex = 0; }
-
Ich würde gerne so wie der Titel meiner Frage besagt ein Array aus Klassen erstellen.
Etwas in der Form
Klasse1 a = new Klasse1[ANZAHLKNOTEN];
-
So sieht mein Fehler aus
Fehler 1 error C3699: "*": Diese Referenzierung kann nicht für den Typ "Edge1" verwendet werden. c:\Users\***\Uni - Projekte\VS 2008 Projekte\Goldberg_Tarjan_Algorithmus\Goldberg_Tarjan_Algorithmus\main.cpp 14 Fehler 2 error C2728: "Edge1": Ein systemeigenes Array kann diesen verwalteten Typ nicht enthalten. c:\Users\***\Uni - Projekte\VS 2008 Projekte\Goldberg_Tarjan_Algorithmus\Goldberg_Tarjan_Algorithmus\main.cpp 14 Fehler 3 error C2750: "Edge1": "new" kann für den Referenztyp nicht verwendet werden. Verwenden Sie stattdessen ''gcnew''. c:\Users\***Uni - Projekte\VS 2008 Projekte\Goldberg_Tarjan_Algorithmus\Goldberg_Tarjan_Algorithmus\main.cpp 14 Fehler 4 error C2440: 'Initialisierung': 'Edge1 *' kann nicht in 'Edge1 ^' konvertiert werden c:\Users\***\Uni - Projekte\VS 2008 Projekte\Goldberg_Tarjan_Algorithmus\Goldberg_Tarjan_Algorithmus\main.cpp 14
Warum ich das mache ist vielleicht nur verwirrend. Aber wer sich mit Diskreter Mathematik auskennt kann mir ja vielleicht sogar dazu einen Tipp geben.
http://www.or.uni-bonn.de/lectures/ws11/edm_uebungen/programm2.pdf
Ich wollte versuchen die Programmieraufgabe vom Diskreten Institut mit c++ zu lösen. Ich versuche das zum ersten mal. Aber mit dem Vector Klassencontainer konnte ich mir nur Probleme ausmalen. Das liegt vielleicht an der gegebenen einzulesenden Datei.
Vielleicht mache ich das ganze auch mit Adjazenzmatrizen. Aber trotzdem wäre es nützlich zu wissen was ich tun muss um so ein Array zu initialisieren.Gruß
-
Das ist kein C++. Schon langsam wirds richtig nervig.
-
Warum nicht?
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Sunflower schrieb:
Warum nicht?
Sorry, dafür kannst Du nichts.
Microsoft verkauft eine Sprache namens C++/CLI so, als sei es C++. Eigentlich ist es Betrug.
C++/CLI ist so weit von C++ weg, daß man es al eigene Sprache werten muß.
-
-
Danke für den Link. Das war sehr aufschlussreich.
- Kann ich mit Visual Studio auch C++ Projekte aufmachen? Bzw. kann ich damit auch C++ Programmieren?
- Ist es bei Visual Studio tatsächlich so dass es Code geben wird den ich nicht kompilieren kann, obwohl er C++ ist?
- Ich hatte garnicht vor eine graphische Oberfläche zu programmieren. Die Idee die Inline Funktionen in den Header zu quetschen kommt aus dem Buch
"Der c++ Programmierer" von Ulrich Breymann S. 153 (Prof. für Informatik)
Die durchaus sinnvoll klingende Begründung ist, dass dadurch der Zugriff um einiges beschleunigt wird. Immerhin muss er nicht jedes Mal einen Funktionsaufruf vornehmen.
Warum gibt er diesen Code dann als C++ aus?
- Könnt ihr mir eine Programmierumgebung empfehlen die zum einen Intellisense (ich denke dass ist sowas wie Autovervollständigung) hat und vielleicht nicht erfordert dass ich mein Programm direkt (selber) in der Konsole kompiliere, sondern dass ich wie zuvor ein integriertes Fenster in der Programmierumgebung nutzten kann um (am besten ohne Konsolenkommandos eingeben zu müssen) das kompilieren des Programms zu beobachten, bzw. die Fehler zu inspezieren.Ich freue mich über jede Antwort
Danke!
-
Du kannst in VC++ ein ganz normales C++-Konsolenprogramm erstellen, indem du eine Win32-Konsolenanwendung auswählst und in den Optionen vorkompilierte Header ausstellst und danach "Leeres Projekt" anhakst. Dann gibts auch IntelliSense.
-
Sunflower schrieb:
- Kann ich mit Visual Studio auch C++ Projekte aufmachen? Bzw. kann ich damit auch C++ Programmieren?
Ja.
Sunflower schrieb:
- Ist es bei Visual Studio tatsächlich so dass es Code geben wird den ich nicht kompilieren kann, obwohl er C++ ist?
Das ist im Prinzip bei allen Compilern so. C++ ist eine komplexe Sprache, kein Compiler unterstützt den Standard perfekt. Außerdem ist der neue C++11 Standard noch recht neu.
Sunflower schrieb:
- Ich hatte garnicht vor eine graphische Oberfläche zu programmieren.
Dann hast du auf jeden Fall in Visual Studio den falschen Projekttyp ausgewält. Richtig wäre eine Win32-Konsolenanwendung, die unabhängig von ihrem Namen auch in ein 64-Bit Programm übersetzt werden kann.
Sunflower schrieb:
Die Idee die Inline Funktionen in den Header zu quetschen kommt aus dem Buch
"Der c++ Programmierer" von Ulrich Breymann S. 153 (Prof. für Informatik)
Die durchaus sinnvoll klingende Begründung ist, dass dadurch der Zugriff um einiges beschleunigt wird. Immerhin muss er nicht jedes Mal einen Funktionsaufruf vornehmen.Dadurch, dass man den Inhalt einer Funktion jeweils dahin kopiert, wo sie aufgerufenen wird, spart man sich in der Tat die paar Nano- oder Mikrosekunden des Funktionsaufrufs, auf Kosten der Größe des erzeugten Programmes.
Aber wer solche Fragen stellt, hat keinen Bedarf an Optimierungen.
Sunflower schrieb:
Warum gibt er diesen Code dann als C++ aus?
Weil es das ist.
Sunflower schrieb:
- Könnt ihr mir eine Programmierumgebung empfehlen die zum einen Intellisense (ich denke dass ist sowas wie Autovervollständigung) hat und vielleicht nicht erfordert dass ich mein Programm direkt (selber) in der Konsole kompiliere, sondern dass ich wie zuvor ein integriertes Fenster in der Programmierumgebung nutzten kann um (am besten ohne Konsolenkommandos eingeben zu müssen) das kompilieren des Programms zu beobachten, bzw. die Fehler zu inspezieren.
Visual Studio kann das was du willst. Hättest du ein C++ Projekt erzeugt, hättest du auch Intellisense.
-
Ok, vielen Dank für die Antworten!
In der Uni ist manchmal der gcc Compiler gefallen.
Wenn ich eine Win32-Konsolenanwendung mit VS 2010 erstelle. Kompiliert er auch mit gcc oder muss ich das irgendwo einstellen dass er bitte gcc benutzten soll?
Oder kann ich davon ausgehen dass der Compiler von VS 2010 keine Probleme mit denen von gcc kompilierten macht?
-
Sunflower schrieb:
Kompiliert er auch mit gcc oder muss ich das irgendwo einstellen dass er bitte gcc benutzten soll?
Nein, für den gcc solltest du eine andere Entwicklungsumgebung benutzen.
Der einzige weitere C++ Compiler, der sich nahtlos in Visual Studio integrieren läßt, ist der von Intel.
Sunflower schrieb:
Oder kann ich davon ausgehen dass der Compiler von VS 2010 keine Probleme mit denen von gcc kompilierten macht?
Wenn dieser Satz bedeuten soll, ob du die gleichen Quelltexte für beide Compiler verwenden kannst:
Für Anfängeranwendungen auf der Kommandozeile, wahrscheinlich in den meisten Fällen ja.
Was Standardkonformität und C++11-Features angeht, ist der gcc sicher überlegen.
Bezogen auf Windows-Spezialitäten (z.B. COM, C++/CLI) ist der Microsoft Compiler quasi der Standard, schliesslich sind Windows, Office & Co damit geschrieben.
-
Danke für die Antworten, jetzt wo ich in der richtigen Sprache programmiere, funktionieren alle Sachen die ich mir vorgestellt habe. Sogar mit dem Vector Container!
Ich benutzte jetzt Code::Blocks
Google sagt der benutzt automatisch gccGruß