C++ C++;尝试使用外部变量时发生LNK2001错误

C++ C++;尝试使用外部变量时发生LNK2001错误,c++,linker,namespaces,extern,lnk2001,C++,Linker,Namespaces,Extern,Lnk2001,我正在尝试创建一个实用程序类,我可以在我的程序中使用它,比如日志记录、调试等 在爪哇中,我知道我可以通过声明变量和函数静态< /强>来做它,因为我在C++中读了更多的方法,我应该使用 ExtNe>强,被命名空间包围,不要填充太多的文件。 在尝试初始化构造函数类中的外部变量时, 我收到以下错误: application.cpp.obj:错误LNK2001:未解析的外部符号“类” 应用程序*Lib::app“ application.cpp.obj:错误LNK2001:未解析的外部符号“类” 图形*

我正在尝试创建一个实用程序类,我可以在我的程序中使用它,比如日志记录、调试等

在爪哇中,我知道我可以通过声明变量和函数<强>静态< /强>来做它,因为我在C++中读了更多的方法,我应该使用<强> ExtNe>强,被命名空间包围,不要填充太多的文件。 在尝试初始化构造函数类中的外部变量时, 我收到以下错误:

application.cpp.obj:错误LNK2001:未解析的外部符号“类” 应用程序*Lib::app“

application.cpp.obj:错误LNK2001:未解析的外部符号“类” 图形*Lib::图形“

这对我来说没什么意义,但有一个链接问题? 我有以下两个文件:

// lib.h
#ifndef LIB_H
#define LIB_H

#include "graphics.h"
#include "application.h"

namespace Lib {
    extern Application *app;
    extern Graphics *graphics;
}

#endif //LIB_H


// application.cpp
#include "include/application.h"
#include "include/lib.h"
.
Application::Application(Listener* listener, Configuration* config, Graphics* graphics) {
    .
    .
    // Our library for graphics
    this->graphics = graphics;
    .
    .
    // creating the environment utils
    Lib::app = this;
    Lib::graphics = graphics;
    .
    .
}

extern
意味着在其他地方定义变量。在您的情况下,必须在lib.cpp中包含以下内容:

namespace Lib {
    Application *app;
    Graphics *graphics;
}
也就是说,您的设计值得怀疑:

在Java中,我知道我可以通过声明变量和 静态功能


<>你可以在C++中做同样的事情,在这种情况下它会更有意义。非常感谢你,尤金!我读到一些静态创建每个静态变量的文件副本,这不是我希望的关键字静态在C++中有很多含义。您所说的是文件作用域和函数作用域静态。我提到了静态类成员,其含义与Java中的相同。