#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. На самом деле, проблема действительно была связана с включениями… Спасибо, Навин!