C++ extern关键字和全局变量

jah*_*aho 3 c++ namespaces global-variables extern

我有两个名为file_utils.h和file_utils.cpp的文件,它们包含一些由不同类使用的方法和变量.以下是它的外观示例:

file_utils.h:

namespace my_namespace
{
extern Foo* foo;
extern Bar* bar;

void my_function(Blah* blah);
}
Run Code Online (Sandbox Code Playgroud)

file_utils.cpp

#include "file_utils.h"

void my_namespace::my_function(Blah* blah)
{
    foo = 0;    // undefined reference to my_namespace::foo
    bar = 0;    // undefined reference to my_namespace::bar
    //...
}
Run Code Online (Sandbox Code Playgroud)

some_class.cpp

#include "file_utils.h"

some_function()
{
    my_namespace::my_function(blah);
    this->foo = *my_namespace::foo; // will that work ok?
}
Run Code Online (Sandbox Code Playgroud)

所以错误在评论中.如果我删除extern关键字,我会收到multiple definition of my_namespace::foo错误.问题是什么?从设计的角度来看,这是一个好主意,还是应该尝试使用静态成员和方法的类?

Luc*_*ore 7

问题是你只声明未定义变量.

您需要在单个实现文件中提供定义:

file_utils.cpp

#include "file_utils.h"

//definition:
namespace my_namespace
{
   Foo* foo;
   Bar* bar;
}

//alternatively, to keep the same formatting you have
//Foo* my_namespace::foo;
//Bar* my_namespace::bar;

void my_namespace::my_function(Blah* blah)
{
    foo = 0;
    bar = 0;
    //...
}
Run Code Online (Sandbox Code Playgroud)