ошибки компилятора — метод передачи в функцию Stack Overflow

Я использую Builder 6.

Понятия не имею, как исправить ошибки:

[C++ Error] loltimer.cpp(11): E2316 '_fastcall TForm1::TForm1(TComponent *)' is not a member of 'TForm1'
[C++ Error] loltimer.cpp(18): E2062 Invalid indirection

Мой код .cpp:

// line 11
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
comboSpell(ComboBox1);
}
//---------------------------------------------------------------------------

void TForm1::comboSpell(TComboBox *combo){
// line 18
*combo ->Items->Add("Flash");
*combo ->Items->Add("Ignite");
*combo ->Items->Add("Exhaust");
*combo ->Items->Add("Teleport");
*combo ->Items->Add("Ghost");
*combo ->Items->Add("Heal");
*combo ->Items->Add("Smite");
*combo ->Items->Add("Barrier");
}

Мой .h код:

public:     // User declarations
__fastcall TForm1(TComponent Owner);
void comboSpell(TComboBox *combo);

1

Решение

[Ошибка C ++] loltimer.cpp (11): E2316 «_fastcall TForm1 :: TForm1 (TComponent *)» не является членом «TForm1»

Декларация вашего TForm() конструктор отличается в вашем .h и .cpp коде, особенно в Owner параметр. Они должны соответствовать:

public:     // User declarations
__fastcall TForm1(TComponent *Owner);

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
...
}
[Ошибка C ++] loltimer.cpp (18): E2062 Недопустимое косвенное обращение

Вы разыменовываете combo указатель с помощью * оператор, а затем разыменовывать его снова с -> оператор. Это не будет работать в этом случае. Вам нужно либо:

  1. Использовать -> Оператор сам по себе (типичное использование):

    combo->Items->Add("Flash");
    
  2. Использовать . оператор вместо -> оператор (не типичный):

    (*combo).Items->Add("Flash");
    
2

Другие решения

Заголовок имеет параметр как TComponent и .cpp имеет это как TComponent *, Вам нужно, чтобы они были одинаковыми.

4