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...