C++ Nap sucht hilfe für praktikumsaufgabe
-
Heyo Leute hab da ne aufgabe bekommen internetseiten auf verfügbarkeit zu testen...
Hab da auch mal ein kleines CLR Programm getippert... Nur leider lässt es sich nich so recht kompilieren... -> Die Fehler kommen sicher irgendwie durch die ArrayLists zustande, da ich diese bisher nur in Java verwendet hab. Meine Fragen dazu wären:
1)Wie hole ich ein Element aus der List - es gibt ja keine Methode wie in Java ala myList.get(Index); (geht das wie bei Arrays?)
2)Wenn ich element aus der List hole muss ich ja sicher auch casten oder - ist der static_cast da der richtige?
3)Kann die ArrayList auch INTs und strings aufnehmen oder muss ich da erst wrappen(weis nich ob das in C++ so heist)?
4)Und dann noch ne Allgemeine Frage was heist eigentlich dieses ^ in der Variablendeklaration (also bsp: String ^ a=Console::ReadLine();)Vllt: kann mir ja jmd. auch mal schnell helfen meine Fehler zu beheben:
Die Fehler treten in den Zeilen:54 56 und 57 auf (hab ich mal mit "//Fehler" markiert)Mein Code:
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <hash_map> #using <system.dll> #using <mscorlib.dll> using namespace System; using namespace std; int size=0; int main() { System::Collections::ArrayList ^ urls=gcnew System::Collections::ArrayList(); System::Collections::ArrayList ^ identifiers=gcnew System::Collections::ArrayList(); System::Collections::ArrayList ^ werte=gcnew System::Collections::ArrayList(); System::Net::WebClient ^ wc = gcnew System::Net::WebClient(); bool fertig=false; while (fertig==false) {++size; cout<<"bitte zu überprüfende Seite eingeben!"<<"\n"; String ^ url=Console::ReadLine(); urls->Add(url); cout<<"bitte identifier eingeben"<<"\n"; String ^ identifier=Console::ReadLine(); identifiers->Add(identifier); cout<<"noch eine zu überprüfende seite hinzufügen?"<<"\n"; cout<<"Ja->1/Nein->beliebiger INT!"<<"\n"; int a; cin>>a; if (a==1) {fertig=false;} else {cout<<"Jetzt testen?->1"<<"\n"; cout<<"Oder doch lieber noch eine Url hinzufügen?->beliebiger INT"<<"\n"; int b; cin>>b; if (b==1) {fertig=true;} else {fertig=false;} } } for (int i=0;i<=size;++i) {int u=0; werte->Add(u);} cout<<"Bitte anzahl der Regressionsdurchläufe eingeben!"<<"\n"; int durchläufe; cin>>durchläufe; for (int durchlauf=0;durchlauf<=durchläufe;++durchlauf) {for (int i=0;i<size;++i) {String ^ url=static_cast<String>(urls[i]); //Fehler String ^ code = wc->DownloadString(url); bool k=code->Contains(static_cast<String>(identifiers[i])); //Fehler if (k==true) {werte[i]=(werte[i])+1;} //Fehler } } cout<<"moppel"; }
-
Da du C++/CLI benutzt, bist du in diesem Unterforum falsch.
-
Hallo
1)Wie hole ich ein Element aus der List - es gibt ja keine Methode wie in Java ala myList.get(Index); (geht das wie bei Arrays?)
Wenn du wirklich eine Liste hast, dann ist kein wahlfreier Zugriff wie bei einem Array möglich, denn darin unterscheiden sich List und Array. Nimm ein dynamisches Array, wenn du soetwas willst.
2)Wenn ich element aus der List hole muss ich ja sicher auch casten oder - ist der static_cast da der richtige?
3)Kann die ArrayList auch INTs und strings aufnehmen oder muss ich da erst wrappen(weis nich ob das in C++ so heist)?
4)Und dann noch ne Allgemeine Frage was heist eigentlich dieses ^ in der Variablendeklaration (also bsp: String ^ a=Console::ReadLine();)Vllt: kann mir ja jmd. auch mal schnell helfen meine Fehler zu beheben:
Die Fehler treten in den Zeilen:54 56 und 57 auf (hab ich mal mit "//Fehler" markiert)Da du Symbole verwendets, die im Standard-C++ nicht vorhanden sind (System::Collections::ArrayList), können wir dazu nichts sagen. Entweder sagts du welches Framework zu benutzt, oder du verwendest Standarkonforme Container wie std::vector oder std::list. Bei letzterem must du nicht casten, weil es Templates sind.
Desweiteren : Verwende hier beim Posten von Code bitte die C++Codetags und rücke deinen Code vernünftig ein, dann schaut sich den jemand auch an.
bis bald
akari
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ 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.
-
Ich hab das ein wenig aufgeräumt. aber sonst nicht viel verändert.
Die Fehler hab ich dir kommentiert und behoben.
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <hash_map> #using <system.dll> #using <mscorlib.dll> using namespace System; using namespace System::Net; using namespace System::Collections; using namespace std; int size=0; int main() { ArrayList ^ urls = gcnew ArrayList(); ArrayList ^ identifiers = gcnew ArrayList(); ArrayList ^ werte = gcnew ArrayList(); WebClient ^ wc = gcnew System::Net::WebClient(); bool fertig=false; while (fertig==false) { ++size; cout<<"bitte zu überprüfende Seite eingeben!"<<"\n"; String ^ url=Console::ReadLine(); urls->Add(url); cout<<"bitte identifier eingeben"<<"\n"; String ^ identifier=Console::ReadLine(); identifiers->Add(identifier); cout<<"noch eine zu überprüfende seite hinzufügen?"<<"\n"; cout<<"Ja->1/Nein->beliebiger INT!"<<"\n"; int a; cin>>a; if (a==1) { fertig=false; } else { cout<<"Jetzt testen?->1"<<"\n"; cout<<"Oder doch lieber noch eine Url hinzufügen?->beliebiger INT"<<"\n"; int b; cin>>b; if (b==1) { fertig=true; } else { fertig=false; } } } for (int i=0;i<=size;++i) { int u=0; werte->Add(u); } cout<<"Bitte anzahl der Regressionsdurchläufe eingeben!"<<"\n"; int durchläufe; cin>>durchläufe; for (int durchlauf=0;durchlauf<=durchläufe;++durchlauf) { for (int i=0;i<size;++i) { String ^ url=safe_cast<String^>(urls[i]); //1. sollte es safe_cast sein und zweitens musst du immer in String^ konvertieren String ^ code = wc->DownloadString(url); bool k=code->Contains(safe_cast<String^>(identifiers[i])); //selbes problem if (k==true) { werte[i]=safe_cast<int>(werte[i])+1; //Hier musst du in int konvertieren. } //Fehler } } cout<<"moppel"; }
-
deine Hilfe in allen ehren aber ich bekomm immer noch die selben Compilerfehler:
Vielleicht hilft euch das ja...
1>------ Erstellen gestartet: Projekt: huiuiui, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>huiuiui.cpp
1>.\huiuiui.cpp(54) : error C3149: "System::String": Dieser Typ kann ohne "^" der obersten Ebene hier nicht verwendet werden.
1>.\huiuiui.cpp(56) : error C3149: "System::String": Dieser Typ kann ohne "^" der obersten Ebene hier nicht verwendet werden.
1>.\huiuiui.cpp(57) : error C2784: "std::_Vb_iterator<_MycontTy> std::operator +(_Vb_iterator<_MycontTy>::difference_type,std::_Vb_iterator<_MycontTy>)": template-Argument für "std::_Vb_iterator<_MycontTy>" konnte nicht von "int" hergeleitet werden.
1> D:\Programme\Microsoft Visual Studio 8\VC\include\vector(1800): Siehe Deklaration von 'std::operator +'
1>.\huiuiui.cpp(57) : error C2784: "std::_Vb_const_iterator<_MycontTy> std::operator +(_Vb_const_iterator<_MycontTy>::difference_type,std::_Vb_const_iterator<_MycontTy>)": template-Argument für "std::_Vb_const_iterator<_MycontTy>" konnte nicht von "int" hergeleitet werden.
1> D:\Programme\Microsoft Visual Studio 8\VC\include\vector(1695): Siehe Deklaration von 'std::operator +'
1>.\huiuiui.cpp(57) : error C2784: "std::_Vector_iterator<_Ty,_Alloc> std::operator +(_Vector_iterator<_Ty,_Alloc>::difference_type,std::_Vector_iterator<_Ty,_Alloc>)": template-Argument für "std::_Vector_iterator<_Ty,_Alloc>" konnte nicht von "int" hergeleitet werden.
1> D:\Programme\Microsoft Visual Studio 8\VC\include\vector(396): Siehe Deklaration von 'std::operator +'
1>.\huiuiui.cpp(57) : error C2784: "std::_Vector_const_iterator<_Ty,_Alloc> std::operator +(_Vector_const_iterator<_Ty,_Alloc>::difference_type,std::_Vector_const_iterator<_Ty,_Alloc>)": template-Argument für "std::_Vector_const_iterator<_Ty,_Alloc>" konnte nicht von "int" hergeleitet werden.
1> D:\Programme\Microsoft Visual Studio 8\VC\include\vector(264): Siehe Deklaration von 'std::operator +'
1>.\huiuiui.cpp(57) : error C2784: "std::_String_iterator<_Elem,_Traits,_Alloc> std::operator +(_String_iterator<_Elem,_Traits,_Alloc>::difference_type,std::_String_iterator<_Elem,_Traits,_Alloc>)": template-Argument für "std::_String_iterator<_Elem,_Traits,_Alloc>" konnte nicht von "int" hergeleitet werden.
1> D:\Programme\Microsoft Visual Studio 8\VC\include\xstring(438): Siehe Deklaration von 'std::operator +'
1>.\huiuiui.cpp(57) : error C2784: "std::_String_const_iterator<_Elem,_Traits,_Alloc> std::operator +(_String_const_iterator<_Elem,_Traits,_Alloc>::difference_type,std::_String_const_iterator<_Elem,_Traits,_Alloc>)": template-Argument für "std::_String_const_iterator<_Elem,_Traits,_Alloc>" konnte nicht von "int" hergeleitet werden.
1> D:\Programme\Microsoft Visual Studio 8\VC\include\xstring(298): Siehe Deklaration von 'std::operator +'
1>.\huiuiui.cpp(57) : error C2784: "std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)": template-Argument für "const std::reverse_iterator<_RanIt> &" konnte nicht von "int" hergeleitet werden.
1> D:\Programme\Microsoft Visual Studio 8\VC\include\xutility(1809): Siehe Deklaration von 'std::operator +'
1>.\huiuiui.cpp(57) : error C2676: Binärer Operator '+': 'System::Object ^' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\paschkef\Desktop\C++ Beispiele\1\huiuiui\Debug\BuildLog.htm" gespeichert.
1>huiuiui - 10 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========!!!Hinweis: die Zeile 54 entspricht hier der Zeile 63!!!
1.)Kann mir jmd. vllt sagen was das ^ hinter der Variablendeklaration bedeutet?
2.)Kann es sein das ich zuerst wrappen muss bevor ich die strings ins array packe?
-
Es ist schon sehr komisch das es bei dir nicht geht, da ich den code den ich dir da gepastet habe, selbst kompiliert habe, ohne jegliche Fehlermeldungen, bist du dir sicher das du das auch angepasst hast?
Ich glaube nämlich nicht.
Was du mit wrappen meinst weiß ich nicht, aber auf jeden Fall ist der Code den ich gepastet habe Compilierbar.
BR
Vinzenz
-
mittlerweile gehts bei mir auch... musste den code nochmal in eine neue anwendung koieren und neu compilieren dann gings... danke dir!
ok das mit dem wrappen hat sich ja dann auch erledigt...
mit wrappen meinte ich:
wenn man in java z.B. primitive datentypen in eine ArrayList machen will kann man das nicht so einfach, da diese nur Object aufnehmen kann - jedoch sind die primitiven datentypen keine Objects...
Deswegen muss man z.B. den ints mit hilfe der wrapperklassen ein Objectdatenkleid verpassen - das hies glaub ich wrappen...Würd aber trotzdem gerne mal wissen was dieses ^ hinter der Variablendeklaration bedeutet...?
-
Moppelheinz schrieb:
mittlerweile gehts bei mir auch... musste den code nochmal in eine neue anwendung koieren und neu compilieren dann gings... danke dir!
ok das mit dem wrappen hat sich ja dann auch erledigt...
mit wrappen meinte ich:
wenn man in java z.B. primitive datentypen in eine ArrayList machen will kann man das nicht so einfach, da diese nur Object aufnehmen kann - jedoch sind die primitiven datentypen keine Objects...
Deswegen muss man z.B. den ints mit hilfe der wrapperklassen ein Objectdatenkleid verpassen - das hies glaub ich wrappen...Würd aber trotzdem gerne mal wissen was dieses ^ hinter der Variablendeklaration bedeutet...?
Edit: System::String ^ ist schon von System::Object abgeleitet.
Das ist ein GC-Handle oder wie man es nehmen möchte ein Zeiger für managed Typen
Edit2: Vielleicht guckst du dir mal die Container in System::Collections::Generic an. Da kannst du dir das casten in und von System::Object sparen.
BR
Vinzenz
-
Hab mittlerweile ein neues Problem:
ich will in System::Net::Configuration::HttpWebRequestElement die Eigenschaft UseUnsafeHeaderParsing auf true setzen...
Ich habe es bisher mit
ystem::Net::Configuration::HttpWebRequestElement::UseUnsafeHeaderParsing(true);
versucht jedoch hat mir der Compiler dann einen Fehler angezeigt:error C3624: "System::Configuration::ConfigurationElement": Für die Verwendung dieses Typs ist ein Verweis auf assembly "System.Configuration" erforderlich.
Diese Diagnose trat beim Importieren von Typ ''System::Net::Configuration::HttpWebRequestElement '' aus Assembly ''System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'' auf.da ich wirklich noob in C# bin hab ich keine ahnung was er mir damit sagen will - und mit googlen komm ich da auch nich wirklich weiter...
Bitte um einen Rat!!!
Danke!!!
-
mach halt was die fehlermeldung dir andeutet:
#using <System.Configuration.dll>
-
Ok danke hat geklappt...
Nun habe ich aber noch ein andere Verstädnisfrage:Und zwar hab ich ja ein Programm welches gebrauch von der Klasse WebClient macht. Diese ist bei mir dafür zuständig einen String aus dem Internet herunterzuladen (methode DownloadString()).
Ein Objekt dieser Klasse hält nach meinem Verständnis ein Objekt der Klasse WebRequest, welches wiederum ein HttpWebRequest Objekt beinhaltet (oder ist HttpWebrequest nur ein Spezielles Webrequest Objekt?)... Von diesem Objekt möchte ich einige Einstellungen ändern (die Protokollversion)...
Dazu hatte ich mir gedacht ich lass mir dieses Objekt (mit einer Methode von WebClient ausgeben [getWebRequest]).
Jetzt die eigentliche Frage:
Wenn ich nun die Einstellungen diesse HttpWebRequest Objektes ändere sind dann auch die Einstellungen des Objektes in WebClient betroffen? ->Eigentlich nicht oder (sagt mir mein verständnis...)
Aber wie kann ich dann mein HttpWebRequest Objekt in Webclient ändern? Es gibt in WebClient nämlich keine Methode welche dieses Objekt setzt... (Sonst hätte man sich dieses Objekt ja ausgeben lassen können dann die Einstellungen ändern und dann dieses Objekt zurückschreiben...)
Hat jmd. vllt. eine Idee um die Einstellung dieses Objektes zu ändern...?Danke...