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错误.问题是什么?从设计的角度来看,这是一个好主意,还是应该尝试使用静态成员和方法的类?
问题是你只声明但未定义变量.
您需要在单个实现文件中提供定义:
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)