gcc не может скомпилировать статическую функцию в пространстве имен - PullRequest
3 голосов
/ 31 марта 2011

У меня есть следующая декларация.

namespace test{
static cl_option* find_opt(const int &val, const cl_option *options);
}

test::cl_option* test::find_opt(const int &val, cl_option *options){}

Проблема в том, что при компиляции я получаю следующую ошибку.

error: ‘test::cl_option* test::find_opt(const int&, test::cl_option*)’ should have been declared inside ‘test’

Заранее спасибо

Ответы [ 2 ]

6 голосов
/ 31 марта 2011

Функция, которую вы объявили, отличается от той, которую вы пытались определить: второй параметр «const» в объявлении, а не в определении.Это две разные функции.

3 голосов
/ 31 марта 2011

Проблема в том, что у вас есть разные подписи объявления и определения (второй аргумент - это указатель const по сравнению с неконстантным указателем). Компилятор ожидал, что вы объявите неконстантную версию в пространстве имен test, но не сможет ее найти (он найдет объявление только с указателем const).

статические функции в пространствах имен работают нормально. Это строит в GCC 4.0.1:

namespace test {
   struct B {};
   static B* a();
}

test::B* test::a() {}

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