//myheader.h
namespace abc{
int func(int x) { return 10 + x;}
inline int callfunc(int a){ return func(a); }
}
//global.h
int func(int x){ return 10 + x; }
В приведенном выше примере, когда код компилируется, и даже если встраиваемая функция не вызывается в любом месте, на данный момент, он возвращает ошибку разрешить неоднозначность для func(int x)
. Почему встроенная функция не принимает существующее определение, которое уже присутствует в namespace abc
?встраиваемая функции не разрешение неоднозначности
'inline' функции все еще компилируются, даже если не вызываются, поэтому *« даже если встраиваемая функция не вызывается в любом месте, на данный момент, он возвращает ошибку»* показывает ваше непонимание того, что' inline' ключевое слово. Эффект * гарантированного * заключается в том, чтобы подавить одно правило определения (ODR) для этой функции. Все другое поведение специфично для компилятора. Кроме того, код, представленный здесь, недостаточен для воспроизведения проблемы. ([Это работает для меня] (http://ideone.com/ATfldv).) – cdhowie
Устранена ли ваша ошибка со спецификой, например {return abc :: func (a); } –
Почему он не разрешает двусмысленность определения функции, которое уже присутствует в текущем пространстве имен. ? – Srikan