Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;类静态变量问题-C程序员新到C++; 我是C程序员,但已经学了C++ +学校的长期后台。现在我尝试在C++中编写代码,但会导致编译器错误。请检查并告诉我我的代码有什么问题 typedef class _filter_session { private: static int session_count; /* Number of sessions count -- Static */ public: _filter_session(); /* Constructor */ ~_filter_session(); /* Destructor */ }FILTER_SESSION; _filter_session::_filter_session(void) { (this->session_count)++; return; } _filter_session::~_filter_session(void) { (this->session_count)--; return; }_C++_Compiler Errors_Static Members - Fatal编程技术网

C++;类静态变量问题-C程序员新到C++; 我是C程序员,但已经学了C++ +学校的长期后台。现在我尝试在C++中编写代码,但会导致编译器错误。请检查并告诉我我的代码有什么问题 typedef class _filter_session { private: static int session_count; /* Number of sessions count -- Static */ public: _filter_session(); /* Constructor */ ~_filter_session(); /* Destructor */ }FILTER_SESSION; _filter_session::_filter_session(void) { (this->session_count)++; return; } _filter_session::~_filter_session(void) { (this->session_count)--; return; }

C++;类静态变量问题-C程序员新到C++; 我是C程序员,但已经学了C++ +学校的长期后台。现在我尝试在C++中编写代码,但会导致编译器错误。请检查并告诉我我的代码有什么问题 typedef class _filter_session { private: static int session_count; /* Number of sessions count -- Static */ public: _filter_session(); /* Constructor */ ~_filter_session(); /* Destructor */ }FILTER_SESSION; _filter_session::_filter_session(void) { (this->session_count)++; return; } _filter_session::~_filter_session(void) { (this->session_count)--; return; },c++,compiler-errors,static-members,C++,Compiler Errors,Static Members,我得到的错误是 “错误LNK2001:未解析的外部符号”专用:静态整数筛选器会话::会话计数”(?会话_count@_filter_session@@0公顷) 顺便说一下,我正在使用VisualStudio2005 请帮帮我 问候, 微核只需使用session\u count++。静态变量不绑定到类的任何实例,因此不能通过此指针访问它。类的所有实例共享一个会话\u计数的实例。事实上,即使不存在类的实例,也可以访问会话计数 编辑好的,我的答案没有解决问题,但是解决了。只需使用session\u c

我得到的错误是

“错误LNK2001:未解析的外部符号”专用:静态整数筛选器会话::会话计数”(?会话_count@_filter_session@@0公顷)

顺便说一下,我正在使用VisualStudio2005

请帮帮我

问候,


微核

只需使用
session\u count++
。静态变量不绑定到类的任何实例,因此不能通过
指针访问它。类的所有实例共享一个
会话\u计数的实例。事实上,即使不存在类的实例,也可以访问会话计数


编辑好的,我的答案没有解决问题,但是解决了。

只需使用
session\u count++
。静态变量不绑定到类的任何实例,因此不能通过
指针访问它。类的所有实例共享一个
会话\u计数的实例。事实上,即使不存在类的实例,也可以访问会话计数


编辑好的,我的答案没有解决问题,但是解决了。

静态
变量需要在类主体之外的某个地方定义。类主体内的声明只是一个声明

例如,在全球范围内:

int _filter_session::session_count;
您需要确保此定义在程序中只出现一次,因此通常将其放在源文件(
.cc
.cpp
)中,而不是包含在多个翻译单元中的头文件中


为了便于移植,您应该避免使用以
开头的类名。也几乎不需要
typedef
您的类名<代码>类名{///…> /COD>在C++中引入了一个类型名称,不必使用<代码>类名<代码>来引用类型。<> p>代码>静态< /COD>变量需要在类体的外部定义。类体中的声明只是声明。< /P> 例如,在全球范围内:

int _filter_session::session_count;
您需要确保此定义在程序中只出现一次,因此通常将其放在源文件(
.cc
.cpp
)中,而不是包含在多个翻译单元中的头文件中


为了便于移植,您应该避免使用以
开头的类名。也不需要
typedef
您的类名。
类名{//.<…/C> >在C++中引入了一个类型名称,您不必使用<代码>类名< /C>来引用类型。

< P>不与您的问题有关,但是在C++中,不需要TyEuff类和结构如下:

typedef class _filter_session
{
  ...
}FILTER_SESSION;
你可以也应该简单地说:

class filter_session
{
  ...
};

<>也,C;LASS名称不应该是大写的,因为人们会把它们与宏混淆。而且你很少需要使用<代码> ->< /C>构造-你的代码当然不。

< P>不与你的问题有关,但是在C++中,不需要TyEuff类和结构类似于:
typedef class _filter_session
{
  ...
}FILTER_SESSION;
你可以也应该简单地说:

class filter_session
{
  ...
};

此外,c;类名称通常不应为大写,因为人们会将其与宏混淆。而且您很少需要使用
this->
构造-您的代码当然不需要。您需要初始化静态变量。此代码实际上编译:

typedef class _filter_session
{
private:
    static int session_count;  /* Number of sessions count -- Static */    
public:
    _filter_session();         /* Constructor */
    ~_filter_session();        /* Destructor */
}; // FILTER_SESSION;

int _filter_session::session_count = 0;


_filter_session::_filter_session(void)
{
    session_count++;
    return;
}


_filter_session::~_filter_session(void)
{
    session_count--;
    return;
}

int main(int argc, const char **argv)
{
  return 0;
}

注意,我对要在g++/Linux上编译的FILTER_会话进行了注释,还添加了一个main并删除了this->(正如另一个成员提到的,该变量不是对象的属性,而是类的属性。将其视为一个命名空间全局变量)

您需要初始化静态变量。此代码实际上编译:

typedef class _filter_session
{
private:
    static int session_count;  /* Number of sessions count -- Static */    
public:
    _filter_session();         /* Constructor */
    ~_filter_session();        /* Destructor */
}; // FILTER_SESSION;

int _filter_session::session_count = 0;


_filter_session::_filter_session(void)
{
    session_count++;
    return;
}


_filter_session::~_filter_session(void)
{
    session_count--;
    return;
}

int main(int argc, const char **argv)
{
  return 0;
}

注意,我对要在g++/Linux上编译的FILTER_会话进行了注释,还添加了一个main并删除了this->(正如另一个成员提到的,该变量不是对象的属性,而是类的属性。将其视为一个命名空间全局变量)

我认为这确实是在编译单元上完成的,或者我在这里把事情混在一起了。在头中这样做很可能会导致多个定义的符号。是的,它需要满足ODR,并且只在程序中定义一次,但由于构造函数和析构函数也在我之前使用的同一代码块中定义为“脱线”要知道这不是头,或者只能包括一次。是的,功能在一个单独的C++文件中。谢谢你指出,没有想到它;我想这是在编译单元上完成的,或者是我把事情混合在一起。在一个标题中这样做很可能会产生多个定义的符号。是的,它需要S。在程序中仅定义一次ODR,只定义一次,但由于构造函数和析构函数在同一代码块中也被定义为“不规则”,所以我猜想这不是一个头,或者必须只包含一次。是的,函数在一个单独的C++文件中。谢谢指出,没有想到它;他计算了活动会话的数量……那么我该怎么做呢?如果它是全局可访问的,那么类外的任何人都可以访问和更改该变量!!!@Microkernel:你错过了Space\u c0w0y的要点。在类内
会话\u count
解析为
\u filter\u session::session\u count
。因为它是一个静态变量
this->session\u count
\u filter\u session::session\u count
session\u count
都引用同一个对象。不建议将变量设置为全局变量。该变量仍封装在类中。我只想保持活动会话数的计数……那么我该怎么做?如果它是全局可访问的e、 班外的任何人都可以访问和更改变量!!!@Microkernel:您错过了Spac