调用在 HXX 文件中声明的静态数据成员

calling a static data member declared in hxx file

本文关键字:静态 数据成员 声明 HXX 文件 调用      更新时间:2023-10-16

我已经在文件中声明了一个静态变量,比如"example.hxx",并在cxx文件中以这种方式调用这个变量"example.cxx" 例子.hxx 文件 :-

class example{
private:
static int p;
public:
void func();
};

CXX 文件

#include <example.hxx>
class example{
void func(){
std::cout<<p;
}
}

我收到对 p 的未定义引用的错误。 为什么会发生这种情况以及如何解决这个问题? 我已经看到了一些与这个问题相关的答案,但没有一个处理单独的 hxx 和 cxx 文件,而是回答 wrt main 函数。如果有人消除我的疑虑,那就太好了!

您只声明了p.你还需要在类外定义它,就像这样:

// .hpp file
class example{
private:
static int p;  // declaration
};
// .cpp file
int example::p = 42;  // definition

或者,您可以执行以下操作:

class example{
private:
inline static int p = 42;  // inline definition
};

您的语法不正确。首先,在 .hxx 文件中定义example时缺少;。其次,您有多种类定义example。相反,您应该按如下方式定义func

void example::func(){
....
}

第三,你对func有多种定义。将void func(){};替换为void func();

完成后,您还缺少 p 的定义。

class example{
private:
static inline int p = some_value;
...

或者在 .cxx 文件中添加定义。