Не могу передать структуру В функцию

PoulArty

✩✩✩✩✩✩✩
5 Ноя 2022
14
0
Здравствуйте!
Пытаюсь передать структуру в функцию класса., но компилятор постояно выдает ошибку, с которой не могу разобраться.

Вот обьявление структуры и ее инициализация:
C++:
class GSM_Un {


  public:

    GSM_Un(Stream &Ser_GSM, Stream &Debug);
    
    char* Ballans(struct GSM_OPER _P, int Asq);
    
    struct GSM_OPER{
      char APN[200];
      char USER[200];
      char PWD[200];
      char BALL[200];
    };

    GSM_OPER BEELINE = {
      _BEELINE_APN,
      _BEELINE_USER,
      _BEELINE_PWD,
      _BEELINE_BALL
    };

    GSM_OPER MEGAFON = {
      _MEGAFON_APN,
      _MEGAFON_USER,
      _MEGAFON_PWD,
      _MEGAFON_BALL
    };


  private:

  
};
Это функция в которую происходит передача структуры:
C++:
char* GSM_Un::Ballans(GSM_OPER _P, int Asq){
 
  _Ser_GSM -> write("AT+CUSD=1,");
  _Ser_GSM -> write(_P.BALL);
  _Ser_GSM -> write('\n');
 
  return Bufer;
}
Компилятор выдает ошибку:
GSM_My.h:33:35: error: expected ',' or '...' before numeric constant
char* Ballans(struct GSM_OPER _P, int Asq);


Если в обьявлении функции убрать struct (char* Ballans(GSM_OPER _P, int Asq);)
то выдает ошибку
GSM_My.h:33:11: error: expected ';' at end of member declaration
char* Ballans(GSM_OPER _P, int Asq);
^~~~~~~
;
GSM_My.h:33:27: error: expected ')' before numeric constant
char* Ballans(GSM_OPER _P, int Asq);
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
634
45
Вам нужно передавать не структуру, а объект с данной структурой.
 

PoulArty

✩✩✩✩✩✩✩
5 Ноя 2022
14
0
Тогда я не понял как записать(обьявить).
char* Ballans(stuct _P, int Asq);?
и потом _Ser_GSM -> write(_P.BALL);?
Но так тоже не работает
 

PoulArty

✩✩✩✩✩✩✩
5 Ноя 2022
14
0
@Bruzzer,
От этого ничего не поменяется.
Если просто в объявлении функции указать вместо структуры переменную char*, то все работает нормально.
А int Asq это переменная которая используется нормально в функции. Просто я, на всю функцию привел в описании вопроса, а то портянка большая будет

@bort707, если не сложно, приведите пожалуйста, пример.
Спасибо.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
499
146
@PoulArty,
Конкретно по вашему вопросу - возможно достаточно перенести объявление функции char* Ballans(struct GSM_OPER _P, int Asq); вниз - после объявления структуры struct GSM_OPER. (В моем тестовом примере помогло).
Кроме этого - вы передаете структуру с массивами по значению, вам это точно надо? (скорее всего нет).
Оговорюсь, я в С++ не силен. Просто решил посмотреть как передаются массивы.
 

PoulArty

✩✩✩✩✩✩✩
5 Ноя 2022
14
0
Оформи код соответствующим тэгом
Уже много всего перепробовал. И поставил инициализацию структур до обьявления функции. И создал структуру вне класса как:
typedef struct {
char APN[200];
char USER[200];
char PWD[200];
char BALL[200];
} GSM_OPER;
а инициализировал:
GSM_OPER BEELINE{
_BEELINE_APN,
_BEELINE_USER,
_BEELINE_PWD,
_BEELINE_BALL
};
И передал в функцию по указателю:
char* GSM_Un::Ballans(GSM_OPER *_P, int Asq){
_Ser_GSM -> write("AT+CUSD=1,");
_Ser_GSM -> write((*_P).BALL);
_Ser_GSM -> write('\n');
}
ВСЕ РАВНО ВЫДАЕТ ОШИБКУ ПРИ КОМПИЛЯЦИИ!!!
 

PoulArty

✩✩✩✩✩✩✩
5 Ноя 2022
14
0
Оформи код соответствующим тэгом
Спасибо всем кто помогал!
"Решил" проблему методом тыка...
Обьявил и инициализировал структуру в классе, иначе выдавало ошибку.
Самое главное оказалось в описании функции.
При декларации функции указал:
char* Ballans(GSM_OPER, int Asq);
А при реализации:
char* GSM_Un::Ballans(GSM_OPER P, int Asq){
_Ser_GSM -> write("AT+CUSD=1,");
_Ser_GSM -> write(P.BALL);
_Ser_GSM -> write('\n');
}