Как добавить параметр шаблона в глобальную функцию? - PullRequest
1 голос
/ 16 ноября 2010

Я работаю с устаревшим кодом и пытаюсь его скомпилировать в Linux. Первоначально он был построен в визуальной студии, чей компилятор не соответствовал стандартам. В любом случае, сейчас я прохожу код, исправляющий его, и наткнулся на шаблонную функцию, которая объявлена ​​глобально. Я получаю ошибку:

/ дома / л / л, /blah.h: 78: ошибка: нет аргументов «Клип», который зависит от шаблона параметр, поэтому объявление «Клип» должен быть доступен

Мне удалось исправить эту ошибку раньше, когда они находились в определенной области, выполнив myClass :: Clip. Однако, поскольку у него нет области действия, как мне решить эту проблему?

Обновлено: вот объявление функции Clip:

template<class T> inline T Clip( T x, T bot, T top )
{ return(( x>=bot && x<=top ) ? x : (( x<bot ) ? bot : top )); }

Звонок на клип:

src_row = Clip( dst_row + h, 0, SR ); 
//dst_row + h, 0, SR are all int's... does that help?
//btw, love the quick responses, thanks.

Вызов и объявление находятся в разных файлах .h

Ответы [ 2 ]

0 голосов
/ 16 ноября 2010

Возможно, вам удастся решить эту проблему с помощью оператора пересмотра области видимости. Как это:

::Clip<params>(...);

Но трудно точно сказать, какая у вас проблема. пожалуйста, отправьте код и точные сообщения об ошибках.

0 голосов
/ 16 ноября 2010

Поместите объявление Clip где-нибудь перед определением шаблона, вызвавшего эту ошибку. Если Clip сам не является шаблоном, подойдет обычное объявление. Если Clip является шаблоном функции и вы нашли определение Clip, вы обычно можете просто скопировать начало этого определения и заменить {...} на ;, чтобы получить действительное объявление.

Edit: Хорошо, вы нашли определение Clip, скажем, в clip.h. И ваша ошибка компиляции в проблеме. Ч.

Лучшее, что можно сделать, это, вероятно, добавить #include <clip.h> в верхней части проблемы.h. Убедитесь, что оба имеют защиту от нескольких включений.

Но это может не сработать, если ввести зависимость от круглого заголовка. Если добавление #include вызывает другие ошибки, вы можете попробовать поместить объявление (а не определение) Clip в problem.h перед определением, которое дало ошибку. Это будет та часть, где вы просто копируете, вставляете и заменяете {...} на ;.

template<class T> inline T Clip( T x, T bot, T top );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...