предаване на arg 2 от квалификатори за отхвърляне от целеви тип указател

Имам следния проблем:

void send_Msg(const char* msg)
  {
  #if channel_free
      (void) din_send_msg(channel, msg); // (void) rcd_send_msg(int channel, char* msg);
  #else
      (void) cin_sendMsg(channel, msg);
  #endif 

(void) din_send_msg(channel, msg); ми дава предупреждението. Подаването на аргумент 2 на „din_send_msg“ отхвърля квалификаторите от целевия тип на указателя.

Знам, че това е така, защото din_send_msg приема int и char* като параметри и превръща моето const char* в char*. Промяната на (void) din_send_msg(int channel, char* msg); на (void) din_send_msg(int channel, const char* msg); и присвояването на const char* на локален указател не направи нищо. Но има голяма вероятност просто да съм го направил погрешно.

Как мога да се справя с това предупреждение?

(И да, абсолютно трябва да се отърва от него, въпреки че е само предупреждение)


person Larysa B.    schedule 16.09.2020    source източник
comment
Добре дошли в SO. Ако можете да промените din_send_msg, за да очаквате указател към символ const, това би било най-добре. И трябва да коригира това предупреждение. Същото ще важи и за cin_sendMsg, ако има същия прототип.   -  person Gerhardh    schedule 16.09.2020
comment
Ако сте сигурни, че тези функции никога няма да променят съдържанието на паметта, можете също просто да използвате кастинг.   -  person Gerhardh    schedule 16.09.2020
comment
Проблемът е, че не е моят код :c И човекът, който ме помоли да намеря решение, също не знае нищо. Искам да кажа, че е наш, но вече няма хора наоколо, кой знае за какво е този код. Освен това друг проект със същите функции няма предупреждение. Което е странно. И не можахме да намерим начина, по който са се справили с това там.   -  person Larysa B.    schedule 16.09.2020


Отговори (1)


Това, което трябва да направите е, ако функцията din_send_msg е ваша и е сигурно, че не променя символите, посочени от указателя, е да промените прототипа на функцията навсякъде и навсякъде, за да използвате

returntype din_send_msg(int channel, const char *msg);

Не знам какъв е действителният тип връщане на функцията.

Ако не можете да направите това, обикновено можете да използвате предаване, за да заглушите предупреждението:

din_send_msg(channel, (char *)msg);
person Antti Haapala    schedule 16.09.2020
comment
Работи, благодаря :) Очевидно, като нов потребител, не мога да гласувам за :c - person Larysa B.; 16.09.2020
comment
Е, разбира се, можете да можете да заглушите предупреждението с кастинг. Но.... уф :/ Това със сигурност трябва да е последната възможност? - person Kevin Boone; 16.09.2020