c ++来自头部的静态函数的奇怪行为

时间:2013-09-12 16:05:21

标签: c++ function header scope

我在头文件中声明了静态函数时出现此问题。 说我有这个文件“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”中的全局​​静态函数,它所做的只是获取allocator对象的实例并使用malloc函数:

static void * my_malloc(size_t size) {
    return MYAllocator::instance()->malloc(size);
}

我不确定这个问题是否与在标题中声明为静态全局的函数的范围有关,但对我来说看起来很奇怪的是它在一个案例中抱怨而在另一个案例中不抱怨:当我使用它时在头部(funcs.hpp)中的静态函数中,包含声明它的头部,它会导致错误“未在此范围内声明”;从包含标题“funcs.hpp”的文件中使用时可以。 我哪里出错?

1 个答案:

答案 0 :(得分:1)

static说明符指定符号(变量或函数)仅在此转换单元中可见。我认为不是你想要的情况,所以删除static说明符 请注意编译器所说的内容:“my_malloc未在此范围内声明”。这正是您使用static指定的内容:Internal linkage

另请注意this use of the static keyword was deprecated in favor of unnamed namespaces