Funktionsübergabe aus Klasse mit Rückgabetyp void in die main Funktion



  • Hallo

    Ich merke ich habe ein konzeptionelles Verständnisproblem.

    Ich habe in einer Klasse eine methode static gesetzt, die Methode hat keine Argumente und gibt void zurück. Bei der Implementierung der Methode habe ich ein paar Sachen gerechnet. Ich habe sie getestet und sie funktioniert. Nun rufe ich diese Methode in der main Funktion auf und frage mich nun, wie ich der main Funktion das Ergebnis der Rechnung übergebe. Wie geht das konzeptionell.

    Hier mein relevanter Code:

    In der main Funktion:

    Pattern::Orthogonal();      // Creates orthogonal pattern
    
    /*
    for(int ik=0; ik < trained._MaxPattern; ik++){
     for(int il=0; il < network._AdSize; il++){
     print << orthogonal[ik][il];
     }
    print << endl;
    }
    */
    

    Das kommentierte möchte ich als nächstes machen und die matrix orthogonal soll aus meiner Funktion kommen

    Im Header meiner Klasse mit public Zugriff:

    static void Orthogonal(); // Create orthogonal patterns
    

    Und im meiner cpp Datei zur implementierung

    void Pattern::Orthogonal() { 
    // Initialize random sequence
    Network net;
    std::vector<int> sequence (net._AdSize);
    for (int i = 0; i < net._AdSize; i++) sequence[i] = i; 
    Routine::FisherYates(sequence);  // Shuffle the sequence
    
    // Initialize matrix for storing the pattern
    Pattern L;          
    std::vector< std::vector<int> > orthogonal(L._MaxPattern, std::vector<int>(net._AdSize));
    
    std::stringstream sstr;
    int z;
    z = net._AdSize/L._MaxPattern;
    Pattern I;
    int ik, il; ik=0; il=0;
    
    // Set orthogonal pattern
     for(ik=0; ik < L._MaxPattern; ik++) {
      for(sstr.str()[il]; il < z; il++){
      orthogonal[ik][sequence[il]] = 1;
      }
     z = z + I._NumOnes;
     }
    }
    

    Wie könnte man nun das Ergebnis der Funktion in die auskommentierte for Schleife in der main Funktion übergeben?

    Danke und Grüße



  • Deinen std::vector< std::vector<int> > zurückgeben statt gar keinen Rückgabewert zu haben?



  • Ich habe den Rückgabetyp geändert.

    im Header:

    static std::vector< std::vector<int> > Orthogonal();
    

    In der .cpp Datei:

    std::vector< std::vector<int> > Pattern::Orthogonal() { 
    // Initialize random sequence
    Network net;
    std::vector<int> sequence (net._AdSize);
    for (int i = 0; i < net._AdSize; i++) sequence[i] = i; 
    Routine::FisherYates(sequence);  // Shuffle the sequence
    
    // Initialize matrix for storing the pattern
    Pattern L;          
    std::vector< std::vector<int> > orthogonal(L._MaxPattern, std::vector<int>(net._AdSize));
    
    std::stringstream sstr;
    int z;
    z = net._AdSize/L._MaxPattern;
    Pattern I;
    int ik, il; ik=0; il=0;
    
    // Set orthogonal pattern
     for(ik=0; ik < L._MaxPattern; ik++) {
      for(sstr.str()[il]; il < z; il++){
      orthogonal[ik][sequence[il]] = 1;
      }
     z = z + I._NumOnes;
     }
    return orthogonal;
    }
    

    In der main Funktion:

    Pattern::Orthogonal();      // Creates orthogonal pattern
    
    for(int ik=0; ik < trained._MaxPattern; ik++){
     for(int il=0; il < network._AdSize; il++){
     cout << orthogonal[ik][il];
     }
    cout << endl;
    }
    

    Wenn ich in der main Funktion dann aber die Schleife starte kommt

    error: ‘orthogonal’ was not declared in this scope
    

    Wie übergibe ich nun meine Matrix dieser Schleife?

    Grüße



  • Wird ja immer trolliger.



  • Ich habe es herausgefunden. In der main Funktion habe ich eine matrix deklariert und diese dann mit der Funktion aufgerufen. Funktioniert 🙂

    std::vector< std::vector<int> > orthogonal(trained._MaxPattern, std::vector<int>(network._AdSize));
    orthogonal=Pattern::Orthogonal();
    

    Danke für die Hilfe sebi707. Es ergibt jetzt mehr Sinn.

    @manni66
    Antworte bitte nicht mehr auf meine Fragen. So dumme Kommentare brauche ich echt nicht. Spiele dich woanders auf... 👎


Log in to reply