gcc无法在命名空间中编译静态函数

时间:2011-03-31 02:08:27

标签: c++ namespaces g++

我有以下声明。

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 个答案:

答案 0 :(得分:6)

您声明的函数与您尝试定义的函数不同:第二个参数在声明中是“const”,而不是在定义中。这是两个不同的功能。

答案 1 :(得分:3)

问题是你有不同的声明和定义签名(第二个参数是const指针与非const指针)。编译器期望你在test命名空间内声明非const版本,但它找不到它(它只找到带有const指针的声明)。

命名空间中的静态函数工作正常。这构建在GCC 4.0.1中:

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

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

int main() { return 0;}