C++ 访问全局静态变量

C++ 访问全局静态变量,c++,C++,我需要从函数中访问全局变量。我的声明如下: file: HeaderFile.hpp namespace SomeNamespace { static SomeClass *globalvariable; } 我必须从另一个文件(CPPFILE.cpp-其中包含#include HeaderFile.hpp)访问此文件。我有一个局部变量: SomeClass *localvariable 在函数中修改这个localvariable之后,我需要将它分配给g

我需要从函数中访问全局变量。我的声明如下:

file: HeaderFile.hpp
namespace SomeNamespace {               
    static SomeClass *globalvariable;
}
我必须从另一个文件(
CPPFILE.cpp
-其中包含#include HeaderFile.hpp
)访问此文件。我有一个局部变量:

SomeClass *localvariable
在函数中修改这个localvariable之后,我需要将它分配给globalvariable。像这样:

SomeNamespace::globalvariable = localvariable;
虽然它不起作用。无论我键入什么,都会出错。要么没有定义该类型(VS报告它正在自动将其更改为int,但随后它的类不匹配),要么如果我在globalvariable之前编写该类,我会得到一个错误,我试图重新定义它

请注意,我对C++和指针不太熟悉。p> 编辑:

SomeNamespace::globalvariable = localvariable
ERROR: missing type specifier - int assumed. Note: C++ does not support default-int

SomeClass * SomeNamespace::globalvariable = localvariable
ERROR: SomeClass * SomeNamespace::globalvariable redefinition

如果它是静态的,则无法在该文件之外访问它。您可能需要的是一个正则变量和一个外部声明。注意:

文件A:

namespace SomeNamespace {               
    SomeClass *globalvariable;
}
文件B:

namespace SomeNamespace {               
    extern SomeClass *globalvariable;
}

//...

SomeClass *localvariable;

//...

SomeNamespace::globalvariable = localvariable;

如果你是C++新手,尽量不要使用指针。搜索智能指针和/或如何处理这些任务的堆栈分配。

请尝试创建一个新的指针并向我们展示,请包括您得到的实际错误。“全局静态”在术语上是矛盾的。在尝试处理多文件项目之前,我建议重新学习基础知识。文件扩展名是什么以及文件如何包含也很重要。因为我们还没有完整的示例,必须继续一次一个地进行“敲打”:哪里定义了
SomeClass
?您是否正在尝试编写
SomeNamespace::globalvariable=localvariable
函数外部?如果是这样的话,把它移到一个函数中去。我发现你关于指针的建议很奇怪——智能指针是指针,增加了所有权和生命周期语义。它们不会替换原始指针,我们当然对OP的情况了解不够,无法知道它们是否适合这里。您肯定是对的,但如果他是新手,并且没有适当的指导,他可能会陷入C+[sic]陷阱,认为存储堆对象的唯一方法是指针。即使他不使用指针,他也应该知道这些。“尽量不要使用指针”听起来像是一句笼统的话,但我明白你的意思。如果是新的,他们可能没有意识到他们可能能够在不需要指针的情况下堆叠和分配这些东西。如果我们要马上下结论,智能指针并不是我们唯一能到达的地方。再说一次:发布一个最小的、完整的、产生错误的示例,其他用户可以查看和测试。告诉我们它发生在哪一行。否则,你只是想让人们猜测吗?可能的原因太多了,根本不值得。