Всем здравстуйте! Я почти разобрался, но существует небольшая проблема. Необходимо создать список, каждый элемент которого содержит массив указателей на данные. Данные вводит пользователь с клавиатуры. Вот заголовочный файл с описанием классов:
| Код | #include <stdio.h> #include <string.h> #include <iostream.h> #include <math.h> #include <conio.h> #include <windows.h>
#define P 2
int K=1; char str[500]; char In[500]; bool ph=false; //----------------------------------------------------------------- //----------------------------------------------------------------- template <class T> class Node; template <class T> class List; //----------------------------------------------------------------- //Класс Node (узел списка) //----------------------------------------------------------------- template <class T> class Node { private: Node<T>* Next; T** Data;
public: Node();
friend class List<T>; }; //----------------------------------------------------------------- template <class T> Node<T>::Node() { Next=NULL; Data=new T*[K*P]; for (int i=0; i<K*P; Data[i]=NULL, i++); K*=2; } //----------------------------------------------------------------- //Класс List (хранитель "головы" и функций над списком) //----------------------------------------------------------------- template <class T> class List { public: Node<T>* Head; List() {Head=NULL;} void AddElem(T*); void Add(T*, Node<T>*); void GetData(); }; //----------------------------------------------------------------- template <class T> void List<T>::AddElem(T* temp) { Node<T>* current = Head; Node<T>* prev = current; Node<T>* q; while(current) { prev=current; current=current->Next; } q=new Node<T>; ph=true; if (prev) prev->Next=q; else Head=q; Add(temp, q); } //----------------------------------------------------------------- template <class T> void List<T>::Add(T* temp, Node<T>* q) { q->Data[0]=temp; } //----------------------------------------------------------------- void List<char>::Add(T* temp, Node<char>* q) { q->Data[0]=new char[strlen(temp)+1]; strcpy(q->Data[0],temp); } //----------------------------------------------------------------- template <class T> void List<T>::GetData() { Node<T>* current=Head; int k=1; while (current) { for(int i=0; i<k*P; i++) { cout << current->Data[i]; } current=current->Next; } }
|
И есть файл main.cpp. Ну здесь не полная его часть, а самое главное, что вызывает вопрос:
| Код | #include "header.h" void Check(char*); void main() { printf("Введите значение элемента: "); cin >> In; Check(In); printf("\nВы ввели: "); PH.GetData(); //ВОТ ЗДЕСЬ И ОШИБКА } //----------------------------------------------------------------- void Check(char* In) { if (atof(In)) { if (atof(In)-atoi(In)) { List<float> PH; PH.AddElem(atof(In)); } List<int> PH; PH.AddElem(atoi(In); } else { List<char> PH; PH.AddElem(In); } } |
В этом и вопрос, как сделать, чтобы можно было либо объявить PH глобально, либо я не знаю как сделать. Посоветуйте пожалуйста! |