Index erfordert ein Array oder einen Zeigertypen?



  • int MaxTeilSum2D(int &a, int n, int min)
    {
    	int max = min;
    
    	for(int i=0; i<n; i++)
    	{
    		for(int j=i; j<n; j++)
    		{
    			int sum = 0;
    
    			for(int k=j; k<n; k++)
    			{
    				sum = sum + a[k][j];
    
    				if(sum > max)
    				{
    					max = sum;
    				}
    			}
    
    		}
    	}
    
    return max;
    }
    
    int main()
    {
    	int n, minimum, MaxSum;
    
    	int folge[4][4] = {-13,25,34,12,-3,7,-87,28,-77,11,1000,-100,26,11,33,-101};
    
    	n = sizeof(folge)/sizeof(int);
    
    	minimum = MinSuche(**folge, n);
    	MaxSum = MaxTeilSum2D(**folge, n, minimum);
    
    return 0;
    }
    

    Hi Leute!

    Obiger Code wirft mir in Zeile 13 einen Fehler, dass der Index ein Array oder einen Zeigertypen erfordert. Wo liegt'n da der Fehler? Ich weiß grad nicht, was da falsch sein soll. An die Funktion hab ich mit nem Pointer korrekt das Array übergeben...


  • Mod

    Ganz einfach: a ist kein Index oder Zeigertyp 😃 . Denn a ist eine Referenz auf einen int. Das kommt davon, wenn man seinen C-Code mit einem C++-Compiler übersetzt, dann haben Fehler im Code nämlich auf einmal richtige syntaktische Bedeutung.

    Du meinst wohl

    int MaxTeilSum2D(int a[][4], int n, int min)
    

    Der Aufruf gestaltet sich dann natürlich anders. Du hast hier ja anscheinend solange ohne Sinn und Verstand Sterne hinzugefügt, bis es (in C++) zufällig richtig war, ohne dass du eine Ahnung hattest, warum und was das überhaupt bedeutet.



  • *Edit
    Sry, habe gerade gemerkt, dass ich etwas komplett falsches geschrieben habe.


  • Mod

    icarus2 schrieb:

    Ich denke die Signatur der Funktion muss

    int MaxTeilSum2D(int **a, int n, int min);
    

    lauten und der Aufruf erfolgt dann mit

    MaxSum = MaxTeilSum2D(folge, n, minimum);
    

    Ein Array ist kein Zeiger! Probier deinen Code mal aus.



  • Ja, habe ich dann auch (etwas zu spaet) gemerkt. Hatte nicht genau hingeschaut. Sry 'bout that.



  • So wie ich das jetzt verstanden habe, meint ihr wohl so:

    int MaxTeilSum2D(int a[][4], int n, int min)
    {
    	int max = min;
    
    	for(int i=0; i<n; i++)
    	{
    		for(int j=i; j<n; j++)
    		{
    			int sum = 0;
    
    			for(int k=j; k<n; k++)
    			{
    				sum = sum + a[k][j];
    
    				if(sum > max)
    				{
    					max = sum;
    				}
    			}
    
    		}
    	}
    
    return max;
    }
    
    int main()
    {
    	int n, minimum, MaxSum;
    
    	int folge[4][4] = {-13,25,34,12,-3,7,-87,28,-77,11,1000,-100,26,11,33,-101};
    
    	n = sizeof(folge)/sizeof(int);
    
    	minimum = MinSuche(folge, n);
    	MaxSum = MaxTeilSum2D(folge, n, minimum);
    
    return 0;
    }
    

    So geht's nun. Vorab mal danke an euch!


Anmelden zum Antworten