У меня есть два файла с именем file_utils.h и file_utils.cpp, которые содержат некоторые методы и переменные, которые используются разными классами. Вот пример того, как это выглядит:C++ extern ключевое слово и глобальные переменные
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
//...
}
some_class.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
. В чем проблема? Это даже хорошая идея с точки зрения дизайна, или я должен попытаться использовать класс со статическими элементами и методами вместо этого?
вы должны ** определить ** свои объекты где-нибудь, в '.cpp', а 'extern' only ** объявляет ** объект со статической связью. – akappa