2d arrays in native class



  • Hallo kann mir jemand sagen warum ich keine 2d arrays benutzen kann?
    Ich meine ich habe im header einer nicht ref class eine array deklariert das ausieht wie folgt

    int array[256][256];

    wenn ich das feld benutze steht immer das selbe drin (Leer) in debug modus:

    name            value           type
                   ------------     ------------    -------
                   +histoData2D     {Length=256}    int[][]
                    [0,0]           {Length=0}      int[]
                    [0,1]           {Length=0}      int[]
    

    u.s.w
    das kann nicht sein aber wiso??
    ich kann es einfach nicht benutzen.



  • maze 3000 schrieb:

    Hallo kann mir jemand sagen warum ich keine 2d arrays benutzen kann?
    Ich meine ich habe im header einer nicht ref class eine array deklariert das ausieht wie folgt

    Also ich habe zwar von classen noch keine Ahnung (lerne ich in 2 wochen) aber soviel ich weiß wird ein array in C++/CLI so deklariert.

    array <Int32,2> name = gcnew array <Int32,2> (256,256);
    

    Wenn du aber in ISO-C++ ein 2-D-Array anlegen willst dann mach es so:

    int name[256][256];
    

    Du hast es ja schon fast so gemacht nur das du als Namen das Schlüsselwort (Reserviertes Wort) verwendet hast und das geht nicht.

    Info: Da ich erst ein Anfänger bin, kann ich es nur nach meinem Wissensstand beantworten wenn es eine Sonderform etc. von einem Array ist dann bitte ich um Entschuldigung.



  • ja mein name ist ja auch nicht array sondern wie man sehen kann in der debug fester

    int histodata[256][256];
    

    und ja es ist iso c++ sonst hätte ich nicht unreferenzierte classe geschrieben!
    es wird nur mit cli:compiler compeliert.

    das problem ist immernoch das selbe und du hast ";" vergessen bei der Deklaration.
    hilft mir überhauptnicht



  • maze 3000 schrieb:

    das problem ist immernoch das selbe und du hast ";" vergessen bei der Deklaration.

    Danke habe schon verbessert!

    maze 3000 schrieb:

    hilft mir überhauptnicht

    Vielleicht hilfst du dann uns mal einwenig:

    Wie "benutzt" du das Array wie schreibst du rein wie greifst du zu?

    bitte den Quelltext posten, denn wie sonst soll einer wissen wieso du das nicht benutzen kannst bzw. die nur den Abschnitt in dem zu auf das Array zugreifst.



  • Hallo nochmal ich greife ganz normal drauf zu mit den klammern operator
    arrayname[y][x]=wert;
    Das Problem ist glaube ich .net cli Compiler Fehler man kann eigentlich nichts falsch machen aber es wurde anscheined kein Speicher für die 2 Dimension reserviert, komisch nur das es trotzdem kein runtime error gibt.

    unsigned char* Histogram::calHisto2D(unsigned char* pData1,unsigned char* pData2)
    {
        int count=0;
        int myMax=0;
        float scaleFactor;
        int histoData2D[256][256];
    
        //for( int i=0;i<256;i++  )
        // histoData2D[i] = new int[256];
        /*
        int **histoData2D;
    
        histoData2D = new int*[256];
        for(int i=0;i<256;i++  ){
          histoData2D[i] = new int[256];
          for(int j = 0; j < 256 ; j++)
               histoData2D[i][j] = 0;
        }
        */
    
        if(size)
        {
    
          while(count<size)
          {
            histoData2D[pData1[count]][pData2[count]]++;
            count+=3;
          }
          for( int cy=0; cy < 256; cy++ )
          {
            for( int cx = 0 ; cx < 256 ; cx++)
            {
              if( myMax < histoData2D[cy][cx] )
                  myMax = histoData2D[cy][cx];
            }
          }
          //============== Scale ================//
    
          scaleFactor = log2(myMax);
          scaleFactor = scaleFactor/255.0f;
    
          for( int cy=0; cy < 256; cy++ )
          {
            for( int cx = 0 ; cx < 256 ; cx++)
            {
                //m_ucHistoData2D[(cy*255) + cx]=(unsigned char)((float)histoData2D[cy][cx]*scaleFactor);
                m_ucHistoData2D[(cy*255) + cx] =(int)(log2(histoData2D[cy][cx])/scaleFactor);	
                if( histoData2D[cy][cx]<0)
                {
                  m_ucHistoData2D[(cy*255) + cx]=0;
                }
            }
          }
        }
        return m_ucHistoData2D;//(int**)&histoData2D;
    }
    

    vielleicht hat jemand eine idee


Anmelden zum Antworten