C ++静态变量undefined reference

时间:2015-02-21 08:44:02

标签: c++ static-members

Clock.h我有

class ClockConf {
public:
static int SCREEN_WIDTH;
static int SCREEN_HEIGHT;

ClockConf.cpp我有

#include "Clock.h"

void ClockConf::init(string conf_name) {
    ClockConf::SCREEN_WIDTH = 1024;
    ClockConf::SCREEN_HEIGHT = 768;

ClockRender.cpp我有

#include "Clock.h"

bool ClockRender::init() {
    gWindow = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED,
    SDL_WINDOWPOS_UNDEFINED, ClockConf::SCREEN_WIDTH,
    ClockConf::SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

main.cpp我有

#include "Clock.h"

ClockConf clockConf= ClockConf();
clockConf.init();
ClockRender cr = ClockRender();
cr.init();

但是在构建时,我在ClockConf和ClockRender都得到了ClockConf::SCREEN_WIDTHClockConf::SCREEN_HEIGHT的未定义引用。请帮忙。

编辑:事实上我在发布之前已经阅读了两个重复链接,但是没有认识到他们正在回答我的问题,因为我来自java和新的c ++(2周)。我甚至在我的代码中尝试了他们的方法,但因为这里和那里的错误使我更加困惑并认为他们没有回答。但是,我的问题让我理解了关于c ++的一些事情(下面)。这些符合我项目的目的:学习。以下是我从中获得的地方:

  1. 与java不同,c ++是单通道编译器。因此,您必须在使用之前声明或建模所有内容。我在头文件中的代码只是一个模型,而不是声明。有了它,我仍然必须在某处宣布它。
  2. 所有这些头文件,包含和cpp编码在概念上都是"单个"编码到编译器。所以重复的名称在调试时增加了混淆。添加ClockConf::之类的限定符会有所帮助,但是您的代码将很难阅读。
  3. 希望这些可以帮助那些有一周c ++经验的人。

0 个答案:

没有答案