【问题标题】:Initializing static member variables in constructors error in c++ [duplicate]在c ++中初始化构造函数中的静态成员变量[重复]
【发布时间】:2015-05-22 16:09:16
【问题描述】:

我遇到了一个问题,我在一个类中定义了一个静态成员变量,其中访问说明符是私有的,但是每当调用对应于对象的构造函数时,编译器都会显示错误“未定义对 MyObject::count 的引用” 这是我的类成员变量声明

class MyObject
{ private:
        static int count;
  public:
      MyObject()
         {
           count=0;
          }
 };    

【问题讨论】:

  • 您真的想在每次创建“MyObject”实例时将静态变量设置为零吗?
  • 我同意@Pixelchemist 在班级的 c'tor 中将变量设置为 0 似乎是错误的做法。我认为您的意思是在课堂之外设置它(在@volerag 中回答:int MyObject::count = 0;
  • 静态变量的意义在于它们独立于对象的任何实例而存在。

标签: c++ compiler-errors static-members


【解决方案1】:

您必须明确定义count,因为没有定义count。您刚刚声明了静态变量,还没有定义它。

class MyObject
{ private:
        static int count;
        MyObject()
        {
           count=0;
        }
 }; 
int MyObject::count = 0; //Explicit definition of static variables.

【讨论】:

  • 已经声明了,int MyObject::count是一个定义。
  • 抱歉,选词有误。我会编辑。
【解决方案2】:
//This is just declaration of class
class Foo
{
};

//This is definition of class
Foo obj;

当您只使用static int count; 行编译代码时,编译器将找不到静态变量的定义。所以它会给你一个“未定义的对‘MyObject::count’的引用的错误。

解决方案:

class MyObject
{ 
private:
      static int count;
public:
      MyObject()
      {
          count=0;
      }
 };

int MyObject::count=0;

int main()
{
    MyObject obj;
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多