【发布时间】:2013-09-12 16:05:20
【问题描述】:
我在头文件中声明的静态函数有这个问题。 假设我有这个文件“test.cpp”:
#include <cstdlib>
#include "funcs.hpp"
...do some operations...
void *ptr = my_malloc(size);
...do some operations...
“funcs.hpp”文件包含:
#include <ctime>
#include "../my_allocator.hpp" // my_malloc is defined here as a
// global static function
...some functions...
static int do_operation() {
// variables declaration
void *p = my_malloc(size);
// ...other operations
}
当我编译我的程序时,我收到一个错误'my_malloc' was not declared in this scope,它与“funcs.hpp”文件中使用的错误有关,但它与“test.cpp”中使用的错误无关。
有问题的函数在头文件“my_allocator.hpp”中定义为全局静态函数,它所做的只是获取分配器对象的实例并使用 malloc 函数:
static void * my_malloc(size_t size) {
return MYAllocator::instance()->malloc(size);
}
我不确定这个问题是否与在标头内声明为静态全局的函数的范围有关,但对我来说看起来很奇怪的是它在一种情况下抱怨而不是在另一种情况下抱怨:当我使用它时在包含声明它的标头的标头(funcs.hpp)中的静态函数中,会导致错误“未在此范围内声明”;虽然从包含标题“funcs.hpp”的文件中使用它是可以的。 我哪里错了?
【问题讨论】:
-
“
my_malloc未在此范围内声明”不是链接器错误,而是名称查找错误。 IE。您的编译器找不到名称my_malloc。如果可能,请提供SSCCE。 -
实际上,编译器确实找到了名称:当我在“funcs.hpp”标头中使用
my_malloc时,它会将名称报告为错误;在“test.cpp”中使用时没有错误。在我看来,包含的标头(“my_allocator.hpp”)以某种方式在“funcs.hhp”文件中被跳过,但在包含“funcs.hpp”的“test.cpp”中正确使用。我真的不明白为什么