静态类变量的编译器错误

时间:2013-01-10 14:13:57

标签: c++

在我的班级宣言的public部分,我有这个:

static float m_screenWidth;
static float m_screenHeight;

然后我可以在类构造函数或其他地方将它们设置为我想要的任何内容,但是,当我使用它们时,编译器会失败,并说:

Undefined symbols for architecture

在我尝试访问这些成员的任何行中都会注明到这一点。在类方法中,我按名称访问它们。在非成员函数中,我使用className::前缀访问它们。没关系,他们不被享受。有什么建议吗?

值得注意的是,他们得到"未宣布"错误,所以他们在某种程度上得到承认。

2 个答案:

答案 0 :(得分:4)

该错误消息是链接器失败消息,而不是编译器失败消息。它声明它无法找到变量的定义。

public部分,他们是声明。它们必须定义,恰好一次,在class定义之外:

float className::m_screenWidth;
float className::m_screenHeight;

答案 1 :(得分:2)

您在头文件中 宣布 。您还必须在某个地方的.cpp文件中 定义

float MyClass::m_screenWidth;
float MyClass::m_screenHeight;

这将告诉编译器实际保留空间并为这些静态变量创建符号。