Получение ошибок при использовании слабого символа в C ++? - PullRequest
0 голосов
/ 03 апреля 2012

Я работаю на C ++.Я создал слабый символ следующим образом:

string* myWeakSymbol(const string str)__attribute__((weak));

и использовал этот символ в функциях следующим образом:

void function()
{
   if(myWeakSymbol)
      myWeakSymbol("balaji");
}

Когда я пытался скомпилировать приведенный выше код, он выдает ошибку:

error: could not convert 'myWeakSymbol' to 'bool'

Любое решение для вышеуказанной ошибки?

1 Ответ

0 голосов
/ 03 апреля 2012

Что if(myWeakSymbol) должен делать?

myWeakSymbol - это функция. Если вы не вызываете myWeakSymbol, а просто используете его в выражении, это рассматривается как адрес функции. Компилятор не знает, как преобразовать адрес функции в логическое значение в операторе if.

Это не имеет ничего общего со слабым атрибутом.


Редактировать: я ошибся. Вы можете взять адрес функции и поместить в оператор if. Это преобразуется в bool. Проблема должна быть где-то еще.

Тем не менее, он не имеет ничего общего с аннотацией weak.

Следующий пример выполняет компиляцию на моей машине:

typedef const char* string;

string* myWeakSymbol(const string str)__attribute__((weak));

void function()
{
  if(myWeakSymbol)
    myWeakSymbol("balaji");
}

int main() {
  return 0;
}
...