【问题标题】:How to access a static member field in a static method in cpp如何在cpp中的静态方法中访问静态成员字段
【发布时间】:2023-01-13 10:48:20
【问题描述】:

我有以下 .h 文件。

#include <stdint.h>
#include <thread>

namespace MyNamespace
{

class Util
{
public:
    static void SetMainThreadId(std::thread::id threadId);

private:
    static std::thread::id m_mainThreadId;
};

}

我有以下 .cpp 文件

#include "Util.h"

namespace MyNamespace
{

class Util
{
    static void Util::SetMainThreadId(std::thread::id threadId)
    {
        Util::m_mainThreadId = threadId;
    }
};

}

为什么上面的代码根本无法编译?我试图在静态方法中分配一个静态变量。这段代码有什么问题?

【问题讨论】:

  • 哦,我知道我需要从 cpp 部分中删除 Util 类,谢谢。

标签: c++


【解决方案1】:

它不会编译,因为修饰符只出现在标题中。 static不应该在函数的实现中。

这应该工作:

void Util::SetMainThreadId(std::thread::id threadId)        
{
    Util::m_mainThreadId = threadId;
}

另请注意,cpp 中没有class Util。这也是一个已经在头文件中完成的定义。实现直接在函数声明中使用类名:class::func (params)

我建议您在尝试任何编码之前阅读 C++ 语法。更不用说像线程这样涉及复杂主题的了。

【讨论】:

  • 谢谢你们两个完整的 cpp 菜鸟。去掉 cpp 文件中的 Class Util { 就成功了。
  • 没关系,我们都得从某个地方开始。但一步一步来。学习一门新语言时,最好的做法是首先了解该语言可以做什么(不要指望用Lua或者松鼠- 是的,有一种叫做 Squirrel 的语言,它的脚本文件叫做坚果).接下来学习它的范式(例如类型安全,面向对象等),然后是它的语法。然后开始练习(但通常第一课应该是在终端上显示文本,读取或写入文本文件,不是多线程、网络流量管理、制作游戏等)。
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多