C ++静态变量和函数错误

时间:2011-09-11 22:07:01

标签: c++ header

  

可能重复:
  What does it mean to have an undefined reference to a static member?

我有一个静态类,如下所示:

.h文件

class c1 {
    public:
    static int disconnect();
    private:
    static bool isConnected;
    };

.cpp文件

#include c1.h

int c1::disconnect()
{
    c1::isConnected = false;
    return 0;
}

然而,当我编译时,出现错误

undefined reference to `c1::m_isConnected'

请帮忙!

3 个答案:

答案 0 :(得分:2)

您必须为静态类成员提供实际的对象实例。将以下内容添加到.cpp文件中:

 bool c1::isConnected;

要将其初始化为特定值,请添加初始值设定项:

 bool c1::isConnected = false;

(顺便说一句,C ++中的类不能是静态的。类只是类型。只有类成员可以是静态的。)

答案 1 :(得分:1)

isConnected是一个(非静态)成员变量,如果没有它所属的实例,则不能使用它。虽然静态变量独立于任何对象而存在,但非静态成员变量作为该类实例的一部分存在。

您需要将isConnected设为静态,或接受将c1设置为isConnected的{​​{1}}实例。你可能想要前者。

答案 2 :(得分:0)

头文件中的内容是声明。但是,您还需要变量的定义。正确的代码如下所示:

class c1 {
public:
    static int disconnect();
private:
    static bool isConnected;
};

bool c1::isConnected = false;

int c1::disconnect()
{
    isConnected = false;
    return 0;
}