std::vector alsOutput einer Funktion

Maxx03

Grünschnabel
Hallo,

Ich würde gerne von einer Funktion einen vector (container aus der std) zurück bekommen.
Wenn ich das so in einer Datei schreibe funktioniert es auch:

C++:
#include <cstdlib>
#include <iostream>
#include "funktionen.h"
#include <vector>
using namespace std;

vector<int> funktion(int anzahl) 
{
vector<int> matrix; 
for (int i=1; i < anzahl ; i++)  matrix1.push_back(i);
return matrix;
}

int main(int argc, char *argv[])
{
vector<int> matrix;
matrix=funktion(10);
for (int i=0;i<10;i++)cout<<matrix[i];  // Ausgabe 1234....

    system("PAUSE");
    return EXIT_SUCCESS;
}

(Zwischenfrage: Ist das "sauber" so? Dass ich in der Funktion einen vector erstelle und mit return ausgebe ? normal muss man hier doch mit zeigern oder dem new konstruktor arbeiten oder ist vector<int> sowieso schon ein zeiger )

Wenn ich nun aber die funktion in eine andere Datei schreibe, und den Funktionskopf in eine Header Datei aufnehme stört es sich immer an der Zeile

vector<int> matrix_instanz(int anzahl) ;

in der header Datei ("expected constructor , destructor or type conversion before < token" "expected , or ; before < token"...)

Was hab ich falsch gemacht ?
 
Zuletzt bearbeitet:
Ok ich hab dämlicher weisse vergessen using namespace std; in die header datei zu schreiben :rolleyes:

Bleibt die Frage ob das so "sauber" ist? (ich weiss dass ich hier auch mit einem einfachen int array arbeiten könnte, aber ich wollte das für vector testen....)
 
Hi.
Hallo,

Ich würde gerne von einer Funktion einen vector (container aus der std) zurück bekommen.
Wenn ich das so in einer Datei schreibe funktioniert es auch:

C++:
#include <cstdlib>
#include <iostream>
#include "funktionen.h"
#include <vector>
using namespace std;

vector<int> funktion(int anzahl) 
{
  vector<int> matrix; 
  for (int i=1; i < anzahl ; i++)  matrix1.push_back(i);
  return matrix;
}

int main(int argc, char *argv[])
{
  vector<int> matrix;
  matrix=funktion(10);
  for (int i=0;i<10;i++) cout<<matrix[i];  // Ausgabe 1234....

  system("PAUSE");
  return EXIT_SUCCESS;
}

(Zwischenfrage: Ist das "sauber" so? Dass ich in der Funktion einen vector erstelle und mit return ausgebe ? normal muss man hier doch mit zeigern oder dem new konstruktor arbeiten oder ist vector<int> sowieso schon ein zeiger )
Nein, vector<int> ist kein Zeiger. Aber im Grunde ist diese Art der Werterückgabe "sauber". Dabei werden allerdings bei der Rückgabe die Werte kopiert, was man meist versucht zu vermeiden da es unnötig und zeitaufwendig ist. Dann muß man allerdings Zeiger oder Referenzen verwenden (was man dann meist über call-by-reference realisiert).

Wenn ich nun aber die funktion in eine andere Datei schreibe, und den Funktionskopf in eine Header Datei aufnehme stört es sich immer an der Zeile

vector<int> matrix_instanz(int anzahl) ;
Da sollte man den Bereichsauflösungsoperator verwenden und den Namensraum direkt angeben:
C++:
std::vector<int> matrix_instanz(int anzahl);
Eine "using namespace std" Anweisung sollte man nicht in eine Headerdatei schreiben, da dadurch der globale Namensraum "verschmutzt" wird für alle C++ Dateien die diese Headerdatei verwenden.

Gruß
 
Zurück