Wczytanie poszczególnych elementów tablicy

0

Mam mały problem. Stworzyłem klasę elementy, w której destruktor tworzy nowe zbiory(tablice dynamiczne). W mainie stworzyłem kilka, wszystko ładnie się wyświetla i mogę przypisywać wartości. Zastanawiam się teraz jak wywowłać poszczególne elementy. Np. chciałbym sprawdzić jakoś wartość ma drugi element zbioru a. Co powinienem wpisać? Miałby ktoś może pomysł gdzie i jak przechowywać ilość elementów w tych zbiorach/tablicach?

main.cpp

#include "stdafx.h"
#include <cstdlib>
#include "Elementy.h"
#include "Zbiory.h"
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Elementy<int> a(3);
	Elementy<string> b(2);
	Elementy<int> c(1);
	Elementy<int> d(2);

	system("pause");
	return 0;
}
#pragma once
#include <iostream>
using namespace std;

template<class typ>class Elementy
{
protected:
	typ *tab;

public:
	Elementy(int=1);
	~Elementy();
	
};

template<class typ> Elementy<typ>::Elementy(int i)
{
	tab = new typ[i];
	cout << "TWORZENIE NOWEGO ZBIORU!" << endl;
	for (int j = 0; j < i; j++)
	{
		cout << "Podaj wartosc elementu zbioru nr " << j + 1 << ": ";
		cin >> tab[j];
	}
}

template<class typ>Elementy<typ>::~Elementy()
{
	delete[] tab;
}
1

Możesz np przeciążyć sobie operator [].

0

.h

	int& operator[](int el);

.cpp

int& Zbiory::operator [](int el)
{ 
	return tab[el]; 
}

i jak w mainie np. piszę pod stworzonym a(3), a[1] to wyskakuje:

Error no operator [] matches these operands
operand types are: Elementy <int> [int]

Dopowiem tylko, że jak naceluję na a, jego typ: Elementy <int> a. Mógłby ktoś pomóc?

1

Skoro trzymasz elementy dowolnego typu, to dlaczego ten operator ma zwracać int?
I skąd się bierze Zbiory? Przecież ta klasa szablonowa to Elementy.

0

Rozpędziłem się. W dalszej części zadania mam różne operacje na tych zbiorach robić w klasie zbiory. No więc przenoszę wszystko do elementów.

typ operator[](unsigned int el);
template<class typ>Elementy<typ>::operator[](unsigned int el)
{
	tab[el];
}

? Teraz nie wyskakuje błąd z typem jednak gdy uruchamiam program wyskakują mi po kolei elementy tablicy do podania niestety przed kolejną utworzoną tablicą nie pojawia się żadna wartość.

0
typ &operator[](unsigned int el);

natomiast przy samej funkcji nie jestem pewien gdzie wstawić &. Mógłbyś pomóc? próbowałem różnie, wciąż nic nie pojawia się na ekranie, a błędów również nie wyrzuca.

1

w funkcji

 return tab[el];
0

Dodałem. Wciąż jednak nic mi nie wyskakuje poza samym tworzeniem tablic. Dodatkowo w liście błędów widnieje 3 razy następujący błąd:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

0

Pokaż aktualny kod, bo może problem jest gdzie indziej?

0

AlgebraZbiorow.cpp

#include "stdafx.h"
#include <cstdlib>
#include "Elementy.h"
#include "Zbiory.h"
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Elementy<int> a(3);
	cout << "Drugi wyraz: " << a[1];
	Elementy<string> b(2);
	Elementy<int> c(1);
	Elementy<int> d(2);

	system("pause");
	return 0;
}

Elementy.cpp

#pragma once
#include <iostream>
using namespace std;

template<class typ>class Elementy
{
protected:
	typ *tab;

public:
	Elementy(int=1);
	~Elementy();
	typ &operator[](unsigned int el);
};

template<class typ> Elementy<typ>::Elementy(int i)
{
	tab = new typ[i];
	cout << "TWORZENIE NOWEGO ZBIORU!" << endl;
	for (int j = 0; j < i; j++)
	{
		cout << "Podaj wartosc elementu zbioru nr " << j + 1 << ": ";
		cin >> tab[j];
	}
}

template<class typ>Elementy<typ>::~Elementy()
{
	delete[] tab;
}

template<class typ>Elementy<typ>::operator[](unsigned int el)
{
	return tab[el];
}

Błąd pokazuje, że jest w Elementy.h w 35 lini. Jak na niego klikam dwukrotnie przenosi mnie przed ostatnią klamrę za "return tab[e1];" Btw. z konstruktorem wszystko w porządku? Dobrze przypisuję wartości?

1 użytkowników online, w tym zalogowanych: 0, gości: 1