Brauche Hilfe bei meinem Programm (array)



  • Ich habe ein Programm geschrieben, das ich nun dynamischer haben will.
    Der Einfachheit wegen habe ich es bissel abgeändert, um mein Problem zu verdeutlichen.

    // Main
    #include <iostream>
    #include <tchar.h>
    #include <conio.h>
    #include "daten.h"
    #include "abfrage.h"
    
    using namespace std;
    
    void main()
    {
    	p_test(*carray_name);
    	_getch();
    }
    
    // daten.h
    char *carray_namen[]=	{"test1","test2","test3"};
    
    // abfrage.h
    p_test(char *carray_name);
    {
    	for (int i=0; i<3; i++)
    	{
    		cout << "du bist Test " << carray_namen[i]<< "!" << endl;
    	}
    }
    

    Das Funktioniert leider nicht:
    error C2664: 'p_test': Konvertierung des Parameters 3 von 'char *(*__w64 )[30]' in 'char *' nicht möglich.

    Aber so geht das:

    void main()
    {
    	char *carray_namen[]=	{"test1","test2","test3"};
    	cout << carray_namen[0] << carray_namen[2]; // ausgabe test1 test3
    	_getch();
    }
    

    plz need help



  • Wenn carray_namen[ ] argument für p_test( ) sein soll, dann müsste p_test( ) so aussegen:

    void p_test( char *carray_name[ ] );
    

    BTW: Soll eine Funktion nichts zurückgeben, so spendiert man ihr normalerweise ein void als Rückgabetyp. Fehlt der Rückgabetyp, so wird imnsho int angenommen.

    Leider ist Deine Problembeschreibung so dürftig, das man nur raten kann, was Du vor hast...

    vielleicht suchst du ja std::vector:

    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    void print( const vector< string > &names ) {
    
        for( vector< string >::const_iterator i = names.begin( ); i != names.end( ); ++i ) {
    
            cout << *i << endl;
        }
    }
    
    int main( )
    {
        vector< string > names;
    
        names.push_back( "test1" );
        names.push_back( "test2" );
        names.push_back( "test3" );
    
        print( names );
    }
    

    Greetz, Swordfish



  • machs so:

    void p_test(char** carray_name)//<< 
    { 
        for (int i=0; i<3; i++) 
        { 
            cout << "du bist Test " << carray_name[i]<< "!" << endl; 
        } 
    }
    
    char *carray_namen[]=    {"test1","test2","test3"};  
    
    int main() 
    { 
        p_test(carray_namen);
    ...
    }
    

    :xmas1:



  • du solltest das "*" wege laden bei deinem funktionaufruf :

    p_test(*carray_name);
    

    alos ->

    p_test(carray_name);
    


  • Danke gerie das funktioniert, aber mal ne Frage was bewirken die zwei **?



  • Swordfish schrieb:

    Fehlt der Rückgabetyp, so wird imnsho int angenommen.

    Nein, in C++ _muss_ der Typ angegeben werden. Diese implizite int Regel gilt hier nicht. Evtl. ist das unter C noch so, da bin ich mir allerdings nicht sicher.

    SBV schrieb:

    aber mal ne Frage was bewirken die zwei **?

    Das ist ein Zeiger auf einen Zeiger. Bei Funktionsparametern ist es das gleiche wie das Beispiel von Swordfish, also char *carray_name[].



  • groovemaster schrieb:

    Swordfish schrieb:

    Fehlt der Rückgabetyp, so wird imnsho int angenommen.

    Nein, in C++ _muss_ der Typ angegeben werden. Diese implizite int Regel gilt hier nicht. Evtl. ist das unter C noch so, da bin ich mir allerdings nicht sicher.

    Hast toll gemacht, groovy... 👍 🙄
    und wieder eines meiner Weltbilder geht den Bach 'runter 🤡

    Wie gerne würd' ich mich doch wieder 'mal wo "hineintiegern"... 😃
    aber außer für Webdesign wird z. zT. für nichts Bezahlt 😞

    Naja entschuldigt bitte, SmallTalk - nein, nicht der zumm essen ...ähm programmieren - die andere Sorte, Kommunikationstechniken und Psychologie (Gruppendynamik/Change-Agent Management) muss/darf mich nun längerwehrend mitreißen... 😉

    Greetz, Swordfish


Anmelden zum Antworten