array und funktionen
-
hallo,
hab folgendes problemich will eine funktion erstellen, die bei aufruf ein array, dass ich unter main() definiert habe und strings enthält, verändert (auf die veränderung kommts hier nicht an).
nun weis ich nicht, wie ich das richtig schreiben muss. so habs ich mir gedacht:
void funktion(string *array[]){ //code zur bearbeitung des arrays } main() { string array[]={1,2,3}; funktion(*array);Egal was ich an den "*" drehe, ich erhalte immer
Fehler 1 error C2664: 'funktion': Konvertierung des Parameters 1 von 'std::string' in 'std::string *[]' nicht möglich
wie muss das richtig heißen?
danke!!!
}
-
Du solltest unbedingt ein Buch zur Hand nehmen, dein Quellcode hat fast in jeder Zeile einen Fehler.
Wenn du ein Array von
std::stringwillst, musst du es mit Strings initialisieren. Zum Beispiel über Zeichenkettenliterale (const char*):std::string Array[] = {"Hallo", " Welt"};Die Funktion nimmt dann einen Zeiger auf
std::string:void Function(std::string* Array) { std::cout << Array[0] << std::endl; }Aber grundsätzlich ist die Variante nicht schön. Nimm statt Arrays und Zeiger besser STL-Container oder den Array-Wrapper
std::tr1::array, die kannst du per Const-Referenz übergeben und die Grösseninformation ist auch grad dabei.
-
Meine Antwort wuerde dir nicht helfen, da ich an deinem Quelltext sehe, dass du sie sowieso nicht verstehst. Nicht boese gemeint, aber lies doch mal das hier (alles): http://www.onlinetutorials.de/cpp-index.htm , gleich das erste - ist aber nur als Download verfuegbar.
-
Also erstmal würde ich zu Grundlagen raten!
Du scheinst einfach mal so drauf los zu schreiben und das kommt nie gut. (Zumindest nicht in C++)void funktion(string *array , int size){ //code zur bearbeitung des arrays } main() { string arr[]={"1","2","3"}; funktion(arr , sizeof(arr)/sizeof(arr[0]) ); }Ich würde aber eher zu einem vector raten, oder einen ähnlichen Container.
void funktion( const std::vector<std::string> & v ){ //code zur bearbeitung des arrays } main() { std::vector<std::string> v; v.push_back ( "1" ); v.push_back ( "2" ); v.push_back ( "3" ); funktion( v ); }
-
Am einfachsten würde das über Vektoren gehen
#include <string> #include <vector> using namespace std; void funktion(vector<string>& test) { //zugriff auf Vektor mit Iteratoren for(vector<string>::iterator it=test.begin();it!=test.end();++it) *it="a"; //alle werte des vektor auf "a" setzen //zugriff auf Vektor mit dem Indexoperator for(unsigned int i=0;i!=test.size();++i) test[i]="b"; //alle werte des vektor auf "b" setzen } int main() { vector<string> DeinArray; //vektor mit string elementen erstellen DeinArray.push_back("1"); // strings zum DeinArray.push_back("2"); // Vektor DeinArray.push_back("3"); // hinzufügen funktion(DeinArray); return 0; }
-
@drakon
Ein kleiner Fehler hat sich in deinem Code reingeschlichen (siehe Funktions-Parameter) :pBenutzung von Zeigern und C-Arrays ohne zu wissen wie sie funktionieren, kann gefaehrlich sein.
Vergiss Zeiger und C-Arrays (voerst)!
Benutz fuer so was Referenzen undstd::vector(siehe meine Vorredner).Gruss
Cartman
-
Eric Cartman schrieb:
@drakon
Ein kleiner Fehler hat sich in deinem Code reingeschlichen (siehe Funktions-Parameter) :pIch sehe da keinen Fehler. Wenn du das const meinst. Naja, ich weiss ja nicht, was er mit "bearbeiten" meint. Und im Zweifelsfall lasse ich es lieber const. Da man, wenn man etwas anderes braucht automatisch drauf stösst und es ist schnell geändert. Der umgekehrte Weg ist ein wenig kritischer.
-
drakon schrieb:
Eric Cartman schrieb:
@drakon
Ein kleiner Fehler hat sich in deinem Code reingeschlichen (siehe Funktions-Parameter) :pIch sehe da keinen Fehler. Wenn du das const meinst. Naja, ich weiss ja nicht, was er mit "bearbeiten" meint. Und im Zweifelsfall lasse ich es lieber const. Da man, wenn man etwas anderes braucht automatisch drauf stösst und es ist schnell geändert. Der umgekehrte Weg ist ein wenig kritischer.
Threadersteller schrieb:
ich will eine funktion erstellen, die bei aufruf ein array, dass ich unter main() definiert habe und strings enthält, verändert (auf die veränderung kommts hier nicht an).
Auch wenn der Satzbau falsch ist, glaube ich, dass er die strings im Array in der Funktion veraendern will. Daher der Fehlerhinweis von mir.

Aber was anderes: Was meinst du mit "wenn man etwas anderes braucht automatisch drauf stoesst". Versteh ich nicht so ganz
Gruss
Cartman
-
Eric Cartman schrieb:
Aber was anderes: Was meinst du mit "wenn man etwas anderes braucht automatisch drauf stoesst". Versteh ich nicht so ganz
Naja. Wenn du etwas konstantes übergibst und die Funktion erstmal nichts verändert passt das so. Wenn du aber im Nachhinein merkst, dass du dennoch etwas in der Funktion bearbeiten willst und du das auch machst, kriegst du erstmal etwas vom Compiler an den Kopf geschmissen. Dann fängst du nochmal an zu überlegen, ob das eine so gute Idee ist, und ob es wirklich nötig ist dort drin etwas zu verändern. Wenn du allerdings von Anfang an das nicht const übgibst, weil du vielleicht etwas dran ändern musst, und du das schlussendlich nicht musst, ist das für den Benutzer der Funktion verwirrend. (Warum ist das nicht const, wenn die Funktion nichts dran ändert?!) - Und vielleicht wird irgendwann etwas an der Funktion geändert und der Benutzer hat sich vielleicht schon drauf verlassen, dass die Funktion nichts ändert. Und dann hast du ein Problem.
-
@drakon
Verstehe
Mach ich eigentlich auch immer so; zur Sicherheit (falls ich nicht vorher schon weiss, dass ein Objekt definitiv veraendert werden muss).Gruss
Cartman