Array aus Struktur ansprechen

hummelhans

Grünschnabel
hallo, habe ein problem mit einem modul welches ich geschrieben hab. und zwar deklariere ich in meiner hedder-datei eine struktur, zu welcher auch ein array gehört. im body deklariere ich die zu hedder zugehörigen funktionen diese funktionen haben die struktur als parameter, allerdings kann ich das array der struktur nicht ansprechen. der compiler meldet dann: "error: invalid types '<unknown type>'[int] for array subscript"

der hedder sieht so aus:
Code:
#ifndef schrammarray_h
#define schrammarray_h

#include <vector>
#include <string>

using namespace std;

struct arrayN 
	{	
		string Name;
		int n;
		vector<double> arr(n);
		bool sort;
	};

void arrayini( arrayN &a, int n, std::string name );

void arrayfuellen( arrayN &a );

void arraysortieren( arrayN &a, bool aufab );

void arrayausgabe( arrayN &a );

#endif

mein body so (der anfang zumindest):
Code:
#include "schrammarray.h"
#include <iostream>
#include <stdlib.h>
#include <vector>
#include <string>

using namespace std;

void arrayini(  arrayN &a, int n, std::string name ) { 
		
		a.n = n;
		a.sort = false;
		a.Name = name;

		for(int i=0; i<a.n; i++ ) {
			
			a.arr[i] = ( rand( 0, 1000 ) ) / 100;
			}
	}
vielen dank schonmal!
 
C++:
struct arrayN {	
	string Name;
	int n;
	vector<double> arr(n);
	bool sort;
};
Zum Zeitpunkt der Instanziierung des Structs ist n per Default gleich 0, was dazu führt, dass auch der Vektor mit 0 Elementen alloziiert wird.

Prinzipiell würde es reichen die Initialisierungsfunktion am Ende so zu gestalten:
C++:
for(int i=0; i<a.n; ++i ) {
	a.arr.push_back( ( rand( 0, 1000 ) ) / 100 );
}

Warum packst du das nicht alles zu einer Klasse zusammen? Da du C++ schreibst, kannst du auch von den Möglichkeiten der Sprache Gebrauch machen.
 
Hi.

@hummelhans: Bitte halte dich an die Netiquette. Threadpushing wird gar nicht gern gesehen. Evlt. solltest du dich auch mal fragen was du falsch gemacht hast wenn keiner antwortet. (Tipp: Netiquette Punkt 15...)
C++:
struct arrayN {	
	string Name;
	int n;
	vector<double> arr(n);
	bool sort;
};
Zum Zeitpunkt der Instanziierung des Structs ist n per Default gleich 0, was dazu führt, dass auch der Vektor mit 0 Elementen alloziiert wird.
Das ist Unsinn. Eigentlich ist dieser Code kein gültiges C++.

Ältere Compiler erlaubten allerdings den Typ von Argumenten wegzulassen und nahmen automatisch int an. Hier würde somit eine Methode namens arr mit einem int als Argument und dem Rückgabetyp vector<double> deklariert.
Warum packst du das nicht alles zu einer Klasse zusammen?
Es gibt keinen wirklichen Unterschied zwischen Strukturen und Klassen in C++ (bis auf die Standardsichtbarkeit).

Gruß
 
ok danke schonmal, hab vorhin auch bemerkt, dass der kompiler denkt es sei eine funktion. es ist eine übungsaufgabe vom studium und soll ausdrücklich ein modul programmieren. wie könnte ich das array denn sonst definieren?
 
ok danke schonmal, hab vorhin auch bemerkt, dass der kompiler denkt es sei eine funktion. es ist eine übungsaufgabe vom studium und soll ausdrücklich ein modul programmieren. wie könnte ich das array denn sonst definieren?
OK. Du scheinst etwas schwer von Begriff zu sein. Nochmal: Netiquette lesen, insbesondere Punkt 15 und entsprechend ordentlich schreiben. Dann bekommst du auch entsprechend ordentlich geschriebene Antworten.

Danke.
 
Zurück