Не могу разобраться как преобразовать типы данных. В моем случае из строки в тип 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 {...}
. По хорошему все ваши сущности структуры...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Даны n целых чисел и ряд из n коробокМежду коробками фиксировано расположены знаки неравенств
Есть ли разница в объявлении operator delete(void*) и operator delete(void*, size_t) для класса? Нужен ли на самом деле второй параметр? И если да, то зачем?
Обнаружилось, что на iOS устройствах в попап окне Fancybox 3 не кликабельны input поля, те