问题标签 [static-members]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2925 浏览

c++ - 填充静态 std::map 类成员变量时声明冲突

我有一个带有静态 std::map 成员变量的类,该变量将chars 映射到自定义类型Terrain。我试图在类的实现文件中填充这个映射,但我得到了几个错误。这是我的头文件:

这是我的实现文件:

我正在使用 g++,我得到的错误是

src/Level.cpp:15: 错误: 冲突声明'std::map, std::allocator >> yarl::level::Level::terrainTypes [46]'<br> src/Level.hpp:104: 错误: 'yarl::level::Level::terrainTypes' 之前的声明为 'std::map, std::allocator >> yarl::level::Level::terrainTypes'<br> src/Level.cpp: 15: 错误: 'std::map, std::allocator >> yarl::level::Level::terrainTypes' 的声明在类之外不是定义
src/Level.cpp:15: 错误: 从'yarl: 转换:level::Terrain' 到非标量类型'std::map, std::allocator > >' 请求的
src/Level.cpp:15: 错误:'yarl::level::Level::terrainTypes' 无法初始化声明时由非常量表达式

我为实现文件中的每个地图分配行获得了一组这些。有人看到我做错了什么吗?谢谢你的帮助。

0 投票
2 回答
2544 浏览

php - 在 PHP 中初始化静态成员

为什么这是不可能的?

我希望能够像这样使用它

..没有实例化任何类。我该怎么做?

更新:好的,我理解了为什么部分。有人可以解释 HOW 部分吗?谢谢 :)

0 投票
2 回答
220 浏览

c++ - 继承和存储静态类信息

我正在尝试用 Lua 设置一些东西,但是 Lua 的细节对我的问题并不重要。

我想做的是调用一个函数,比如说OpenLib<T>(L),让它获取特定类(以及它的表)的表名,并将其注册到 Lua。它基本上归结为:

我已经尝试了几种不同的方法,但我无法让它正常工作。我尝试制作一个包含 myTable 和 myTableName 的基类,如下所示:

然后我可以从 LuaInfo 继承,然后填写我需要的信息。这不起作用,因为从 LuaInfo 继承的所有类都会获得相同的信息,所以我环顾四周,产生了这样做的想法:

这使得初始化它的语法有点傻,因为我现在必须做 class Widget : public LuaInfo,但它更接近工作。

我已经尝试了一些变体来尝试让它正确,但我不断收到类似的错误

我想做的事情是否可能,如果是,那么正确的方法是什么?

0 投票
2 回答
1753 浏览

c++ - 在模板实例之间共享静态成员?(不可能的?)

我正在做一些可能很愚蠢的事情,但如果它有效,那就太好了。

我试图以一种我需要自己的查找结构的方式专门化类型,该查找结构本质上是全局的(但理想情况下封装为类变量),但我希望对象是类型安全的,因此它们是参数化的。

因此,我基本上有

无论出于何种原因,直到我去初始化lookupTable时我才想到,当我说

将有许多不同lookupTable的 s 附加到SpecialArray.

我怀疑这可能只是一个白日梦,正确的答案就是让它成为一个单独的全局单例对象,但无论如何,有没有办法让lookupTable所有的SpecialArrays 都只有一个?

就像,在我心目中的 C++(这不是真正的 C++)中,这会像

...但遗憾的是 GCC 并没有在我的脑海中编译 C++

有没有什么实际的方法可以得到我想要的东西(在 C++0x-land 的某个地方或其他地方)?我也可能会使用一些操纵此查找表的静态方法(它不跟踪类型或 Ns)遇到这个问题。

...对不起,如果这没有任何意义。

提前感谢您提供的任何帮助或同情。

0 投票
2 回答
1305 浏览

f# - Seq seq 类型作为 F# 中的成员参数

为什么这段代码不起作用?

它给出以下错误:

0 投票
2 回答
1219 浏览

c# - 在 C# 中为全局对象使用静态类

我正在使用粒子列表。

通常我把这个列表放在我的模拟课上。它计算粒子的位置、速度和其他属性。

其他一些类需要此粒子数据用于输出和后处理。

是否可以创建一个静态类,

从其他类访问粒子数据?

0 投票
5 回答
1927 浏览

c++ - 在模板类中初始化静态指针

考虑这样一个类:

我无法弄清楚为什么我无法成功创建该指针对象。

上面的代码都是在头部指定的,我提到的问题是链接步骤出错,所以没有找到具体的符号。

0 投票
1 回答
468 浏览

c# - 如何强制静态类实现特定方法?

我需要创建一组静态类,它们都需要实现相同的方法。我想找到一种方法来强迫他们这样做。

我知道静态类不能派生 System.Object 以外的任何东西。我应该为此使用非静态方法吗?可能是,但是此类的所有方法都不会使用实例属性...

我最好的办法是我应该使用单例。那时我将使用一个实例,但至少我不必在每次需要使用方法时都实例化该类。

您建议的替代方案是什么?

编辑:

我不会实现这些方法。我需要强制其他开发人员实现具有特定签名的特定方法。每个班级的所有签名都是相同的。而已。

想象一下,您有一个静态类,可以从您办公室的数据库中获取记录。你有几种方法可以做到这一点。由于这些方法都不共享变量,因此它们被标记为静态,类也是如此。

现在,您和您团队中的其他开发人员必须对您无法控制的其他数据库甚至 API 执行相同的操作,这并不重要。您想强迫您的同事使用完全相同的方法和相同的签名来实现所有这些类。

您的意见总是受欢迎的,但现在我只想找到最接近的方法。

我可以使用所有其他人都可以继承的抽象类。但是由于这些方法不共享任何东西,我不希望每次需要它们时都实例化该类。

这就是我提到使用单例模式的原因。我不应该这样做吗?

0 投票
3 回答
2998 浏览

c++ - 尝试使用静态方法/成员

在过去的几年里,我被 C# 编码宠坏了,现在我回到 C++ 上,发现我在处理本应简单的东西时遇到了麻烦。我正在使用名为 DarkGDK 的第三方游戏开发库(任何以 db 为前缀的命令),但是 DGDK 不是问题。

这是我的代码:

系统.h

系统.cpp

这里的想法是有一个映射字符串与整数值的映射,以使用字符串而不是硬编码值来访问图像。这个类没有完成,所以它不处理像卸载图像这样的事情。我想在不传递 System 实例的情况下访问图像方法,所以我使用了 static。

现在我得到这个错误:

blahblah\system.cpp(39) : error C2677: binary '[' : no global operator found which take type 'std::string' (或者没有可接受的转换)

如果我将地图更改为静态,我会收到此链接器错误:

1>System.obj:错误 LNK2001:未解析的外部符号“私有:静态类 std::map,class std::allocator >,int,struct std::less,class std::allocator > >,class std::allocator ,class std::allocator > const ,int> > > System::m_images" (?m_images@System@@0V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@ D@2@@std@@HU?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U ?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@std@@@2@@std@@A)

你们中的任何一个聪明的家伙可以帮助我吗?

0 投票
13 回答
33171 浏览

c# - 为什么关键字“this”不能在静态方法中使用?

为什么不能this在静态方法中使用关键字?我想知道为什么 C# 定义了这个约束。通过这种约束可以获得什么好处?

[更新]:其实这是我在采访中得到的一个问题。我确实知道'static'和'this'的用法,根据您的所有回复,我想我知道为什么两者不能一起使用。也就是说,静态方法用于更改状态或在类型级别执行某些操作,但是当您需要使用“this”时,意味着您要更改状态或在实例级别执行某些操作。为了区分类型的状态变化和实例的状态变化,那么c#不允许在静态方法中使用'this'。我对吗?