我有两个名为 file_utils.h 和 file_utils.cpp 的文件,其中包含不同类使用的一些方法和变量。下面是它的外观示例:
file_utils.h:
namespace my_namespace
{
extern Foo* foo;
extern Bar* bar;
void my_function(Blah* blah);
}
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
//...
}
一些类.cpp
#include "file_utils.h"
some_function()
{
my_namespace::my_function(blah);
this->foo = *my_namespace::foo; // will that work ok?
}
所以错误在评论中。如果删除 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;
//...
}
关于C++ extern 关键字和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11122958/