Проблема с функцией глобального шаблона

#c #templates #gcc

#c #шаблоны #gcc

Вопрос:

По какой-то причине я не могу вызвать свою функцию глобального шаблона в GCC

Глобальная функция, определенная в «globals.h«:

 template <typename T1, typename T2> inline T1 Min (const T1 amp; v1, const T2 amp; v2)
{
    return v1 < v2 ? v1 : v2;
}
  

Вызов функции из класса, определенного в «test.h«:

 #include "globals.h"

class Test
{
public:
    Test()
    {
        int a = 2;
        int b = 3;
        int c = Min(a, b); //error: 'Min' was not declared in this scope
        int d = ::Min(a, b); //error: '::Min' has not been declared
        int e = Min<const int, const int>(a, b); //error: expected primary-expression before 'const'
        int f = this->Min(a, b); //error: 'class Test' has no member named 'Min'
    }
};
  

Что мне делать?

Комментарии:

1. Вы включаете Test.h в globals.h ?

2. Нет, зачем мне это делать?

3. Просто подозревал циклическое включение. В противном случае код должен нормально компилироваться (за исключением последнего оператора int f =... ).

4. Я подозреваю, что некоторые другие globals.h включаются. Для тестирования поместите какой-нибудь бессмысленный текст в свой globals.h и перекомпилируйте — если вы не получаете синтаксическую ошибку из своего globals.h, она не включается.

5. Я получаю много ошибок, потому что этот заголовок включен почти везде…

Ответ №1:

g версии 4.3.4 компилирует их корректно, выдавая ошибку только для последней строки. Смотрите http://ideone.com/cD13Y . Какую версию вы используете?

Комментарии:

1. Хм… Я использую Apple GCC 4.2.1

2. На самом деле, проблема действительно была связана с включениями… Спасибо, Навин!