gpt4 book ai didi

c++ - 全局变量和链接器错误

转载 作者:太空狗 更新时间:2023-10-29 23:53:01 25 4
gpt4 key购买 nike

我使用 OpenGL 用 C++ 编写了一个简单的程序。我需要的是在两个文件中包含几个全局变量 - main.cppfuncs.cpp - 它们将保持相同的值。当我试图在 funcs.h 中声明这些变量时(它也包含在 main.cpp 中)我得到了这个错误:

1>main.obj : error LNK2005: "int myVariable" (?myVariable@@3HA) already defined in funcs.obj
1>Path to my program : fatal error LNK1169: one or more multiply defined symbols found

这很明显,因为它会在 funcs.cpp 和 main.cpp 中创建变量。当我尝试以这种方式声明变量时:

//funcs.cpp
int myVariable;

//main.cpp
int myVariable;

而且它们都是全局的,我得到的错误与上面完全相同。让我感兴趣的是,两个变量在对面的文件中都不可见,那么为什么同名变量是错误的呢?据我所知,不可能从 main.cpp 和反向引用 funcs.cpp 中的 myVariable。我的第二个问题是 - 解决我的问题的最佳方法是什么,因为我所做的只是重命名其中一些变量(其中有很多)并在 funcs.cpp 中添加函数,如 setNewValue(int newValue) 我可以从 main.cpp 调用它,但老实说 - 我并不为此感到自豪。

我使用 Microsoft Visual Studio 2012、C++/OpenGL。

最佳答案

使用 C++:

  • 如果您试图在两个文件之间共享全局变量,则在其中一个文件中声明它,例如main.c,就像您现在所做的那样,并在另一个文件中将变量声明为 extern。这样,该变量已在一个文件中声明,同一个变量可以在其他文件中使用,并且您不会遇到该变量的多个定义问题。

  • 如果您想在每个文件中使用同名的全局变量,这样文件不共享该变量,则使用匿名命名空间 限制变量的可见性:

    namespace
    {
    int myVariable;

    // ...

标准 C:为了完整起见,如果您使用标准 C,而不是使用 namespace 来限制变量的可见性,您可以使用 static 关键字:如上,如果你想在每个文件中使用同名的全局变量,并且你希望文件共享那个变量,那么您需要将它们声明为 static。这限制了他们对当前文件的可见性。

使用 extern 共享全局在 C 中的工作方式类似。

关于c++ - 全局变量和链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12901075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com