Не могу разобраться как преобразовать типы данных. В моем случае из строки в тип TElement.
Допустим есть Класс TSpisok, в нем функция AddElement принимающая TElement *e в качестве параметра
class TElement
{
public:
TElement *next,*prev;
};
class TSpisok
{
TElement *first,*last,*cur;
public:
TSpisok() {
first = last = cur = NULL;
};
class TNumber : TElement {
public: int num;
TNumber(int n): TElement(),
num(n) {}
};
class TString : TElement {
public: char str[20];
TString(char s[20]): TElement() {
strcpy(str, s);
}
};
void AddElement (TElement *e)
{
//что то делается
};
void ShowList (int index)
{
cur = first;
while (cur != NULL) {
Form1->ListBox1->Items->Add(cur);
}
};
}
По нажатию кнопки нужно передать в функцию AddElement значение из текстобокса, т.е. строку типа String\Char
TElement * p;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char * st;
int k;
st = new char[20];
st = Edit1->Text.c_str();
if (strstr(st, "") != NULL) {
k = atoi(st);
if (k || (strlen(st) == 1 && st[0] == '0'))
p = new TNumber(k);
else p = new TString(st);
Spisok.AddElement(p);
}
}
и как вывести элемент списка на ListBox в форме?
void ShowList (int index)
{
cur = first;
while (cur != NULL) {
Form1->ListBox1->Items->Add(cur);
}
};
На что получаю ошибку. Вопрос, как грамотно передавать параметры?
[C++ Error] Unit1.cpp(65): E2034 Cannot convert 'TElement *' to 'AnsiString'
class TNumber : TElement {...}
означает закрытое наследование, которое подразумевает, что наследуемый класс лишь может использовать открытые и защищенные члены базового. Только функции_члены этого класса и друзья класса могут преобразовать указатель класса в указатель базового. Поэтому, если вы хотите во внешней функции делать это, то следует наследовать открыто: class TNumber : public TElement {...}
или же struct TNumber : TElement {...}
. По хорошему все ваши сущности структуры...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Даны n целых чисел и ряд из n коробокМежду коробками фиксировано расположены знаки неравенств
Есть ли разница в объявлении operator delete(void*) и operator delete(void*, size_t) для класса? Нужен ли на самом деле второй параметр? И если да, то зачем?
Обнаружилось, что на iOS устройствах в попап окне Fancybox 3 не кликабельны input поля, те