跨多个Cpp文件使用变量

时间:2012-08-22 00:28:48

标签: c++ scope header-files ld extern

已经搜索了足够的答案,但没有一个解决方案适合我。

场景: 我试图包含一个.h文件,其中声明了一些函数(未定义)和一些变量声明。

如果我将这个头文件包含在实际使用函数和变量的源文件中(准确地说是2),那么最后编译的头文件会有一个链接器错误,表明

  

未定义引用`abc :: myfun(char const *,char const *,char *)'

头文件中的所有函数和变量都已声明为extern,并且包含防护。

我希望有一个cpp文件在.h文件中定义的变量中放置一个值,另一个cpp文件能够读取它。

如果它有帮助,我的每一段代码都在我定义的命名空间中(namespace abc{ //all my code, in all the files }

2 个答案:

答案 0 :(得分:3)

.h文件中的声明正是这样做的 - 让编译器知道 “某处”将是一个编译单元(.c.cpp文件),其中该变量将定义

这是一个例子(为简单起见跳过警卫):

foo.h

extern int global_foo;

foo.c

#include "foo.h"
int global_foo; // optionally you can initialize like this: int global_foo = 123;

main.c

#include "foo.h"
void bar()
{
  global_foo = 0; // accessing that variable which is "outside" of this file

正如上面提到的paddy - 确保您不会意外地嵌套命名空间,因为abc::somethingabc::abc::something

不同

答案 1 :(得分:0)

您的错误似乎与abc::myfun(char const*, char const*, char*)有关。我能够重现并证实这一点。如果没有第二部分,您将收到错误。

我猜你有一个类似

的头文件
namespace abc 
{
    void myfun(char const* p1, char const* p2, char* p3);
}

和.cpp源文件需要

namespace abc
{
    void myfun(char const* p1, char const* p2, char* p3)
    {
        // do fun stuff
    }
}