C++ LNK2001 尝试使用外部变量时出错
C++ LNK2001 Error on trying to use External Variable
我正在尝试创建一个实用程序 class,我可以使用它来全面使用我的程序,例如日志记录、调试等。
在 Java 中,我知道我可以通过声明变量和函数 static 来实现它,因为我阅读了更多如何在 C++ 中实现它,我应该使用 extern,被命名空间包围,不要填充太多文件。
在尝试初始化那些 extern 变量时,在构造函数 class 中,
我收到以下错误:
application.cpp.obj : error LNK2001: unresolved external symbol "class
Application * Lib::app"
application.cpp.obj : error LNK2001: unresolved external symbol "class
Graphics * Lib::graphics"
哪个对我来说没什么意义,但存在链接问题?
我有以下 2 个文件:
// 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;
}
也就是说,你的设计有问题:
In Java, I know I can make it as by declaring the variables and
functions static
你可以在 C++ 中做同样的事情,在这种情况下它会更有意义。
我正在尝试创建一个实用程序 class,我可以使用它来全面使用我的程序,例如日志记录、调试等。
在 Java 中,我知道我可以通过声明变量和函数 static 来实现它,因为我阅读了更多如何在 C++ 中实现它,我应该使用 extern,被命名空间包围,不要填充太多文件。 在尝试初始化那些 extern 变量时,在构造函数 class 中, 我收到以下错误:
application.cpp.obj : error LNK2001: unresolved external symbol "class Application * Lib::app"
application.cpp.obj : error LNK2001: unresolved external symbol "class Graphics * Lib::graphics"
哪个对我来说没什么意义,但存在链接问题? 我有以下 2 个文件:
// 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;
}
也就是说,你的设计有问题:
In Java, I know I can make it as by declaring the variables and functions static
你可以在 C++ 中做同样的事情,在这种情况下它会更有意义。