首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C ++静态常量字符串(类成员)?

C ++静态常量字符串(类成员)?

提问于 2017-12-26 08:18:37
回答 2关注 0查看 1.4K

我想有一个类的私有静态常量(在这种情况下形状工厂)。我想有这样的事情。

代码语言:txt
AI代码解释
复制
class A {
代码语言:txt
AI代码解释
复制
   private:
代码语言:txt
AI代码解释
复制
      static const string RECTANGLE = "rectangle";
代码语言:txt
AI代码解释
复制
}

不幸的是,我得到了C ++(g ++)编译器的各种错误,例如:

ISO C ++禁止成员'RECTANGLE'的初始化

非整型类型“std :: string”的静态数据成员的无效类内初始化

错误:使“RECTANGLE”静态

回答 2

嗨喽你好

发布于 2017-12-26 08:36:04

在C ++ 11中,你现在可以做到:

代码语言:txt
AI代码解释
复制
class A {
代码语言:txt
AI代码解释
复制
 private:
代码语言:txt
AI代码解释
复制
  static constexpr const char* STRING = "some useful string constant";
代码语言:txt
AI代码解释
复制
};

御姐万岁

发布于 2017-12-26 08:35:51

你必须在类定义之外定义静态成员,并在其中提供初始化程序。

第一

代码语言:txt
AI代码解释
复制
// In a header file (if it is in a header file in your case)
代码语言:txt
AI代码解释
复制
class A {   
代码语言:txt
AI代码解释
复制
private:      
代码语言:txt
AI代码解释
复制
  static const string RECTANGLE;
代码语言:txt
AI代码解释
复制
};

接着

代码语言:txt
AI代码解释
复制
// In one of the implementation files
代码语言:txt
AI代码解释
复制
const string A::RECTANGLE = "rectangle";

你最初尝试使用的语法(类定义中的初始值设定项)只允许使用整型和枚举类型。

和开发者交流更多问题细节吧,去 写回答
相关文章
C++:09---类静态成员、类常量成员
一、类静态成员(static) 先介绍一下什么是静态变量、静态函数 静态局部变量:存在域(全局数据区),作用域(块作用域) 静态全局变量:存在域(全局数据区),作用域(整个文件) 静态函数:存在域(全局数据区),作用域(整个文件) static int a=10;//全局静态变量 static void add();//静态函数 int main() { { static int b=10;//局部静态变量 } } 特点: 静态static修饰的变量、函数,只需要初始化一
用户3479834
2021/02/03
1.7K0
C++:09---类静态成员、类常量成员
C++静态类成员
静态类成员通常适用于当一个类的所有对象之间需要共享同一份数据的时候,这样子能节省空间,提高效率。
灯珑LoGin
2022/10/31
7910
C++_类中静态成员
在C语言中曾经学习过静态变量, 其定义为经过static修饰过的变量, 其有着与整个源程序相同的生命周期, 其作用域与自动变量相同, 又分为静态全局变量和静态局部变量.
木杉乀
2021/05/06
6180
C++类的静态数据成员和静态成员函数
一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个对象的这个数据成员设定相同的值,如果改变类对象相同的属性,那么意味着我们需要对它们统一操作,这就有可能出现它们的值会不一样的情况,如果用全局变量来描述它们相同的属性,就会破坏类的独立性。
叶茂林
2023/07/30
5260
C++ 类的静态成员
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面的实例所示。
用户7272142
2023/10/19
4500
【C++】C++类的静态成员
比如我们现在要设计一款战争游戏,在这款游戏中,分为多个兵种,每个兵种都有一定数量的士兵,游戏过程中,每隔一定时间每个兵种都会产生一定数量的士兵,由于战争的消耗,每个兵种的士兵都会减少。 为了使情节更逼真,引入了士气这个概念,当士气比较高的时候,这个兵种的战斗力就比较强,士气低的时候,这个兵种的战斗力就比较弱。 士兵的士气受很多因素影响,其中一个最直接的因素就是和这个兵种的数量直接相关,当这个兵种的士兵比较多,这个兵种的士气就比较高,战斗力就比较强。如果说当前的兵种士兵比较少,那么士气就比较弱,战斗力也比较弱。
谙忆
2021/01/21
7030
C++_const 常量成员以及成员初始化列表及其常量类
常量成员,指的是在C++类中声明对象成员时可以加上const关键字,这样声明的成员叫常量成员, 常量成员分为常量数据成员和常量函数成员
木杉乀
2021/05/08
1.1K0
《挑战30天C++入门极限》C++类静态数据成员与类静态成员函数
C++类静态数据成员与类静态成员函数   在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢?   这个问题便是本章的重点:   声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。   下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态
landv
2019/07/15
7750
C++类大小和静态成员/方法
类大小计算 空类的大小为1字节 一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的 字节对齐的问题。与C语言一致 没有继承的时候,存在虚函数则需要加上虚指针vptr(+4个字节),如果有多个也只需要加上一个,因为只有一个虚指针。 虚基类指针:如果是虚继承,则子类的大小为:虚基类的大小 + 4个字节(用来存放指向虚基对象的指针)+子类新增成员的大小。 示例 #include <iostream> using namespace std; /** * 8=4(x)
用户2929716
2018/08/23
7980
C#基础知识系列六(静态类和静态类成员)
  静态类与非静态类基本相同,但存在一个区别:静态类不能实例化。 也就是说,不能使用 new 关键字创建静态类类型的变量。 因为没有实例变量,所以要使用类名本身访问静态类的成员。 例如,如果名为 UtilityClass 的静态类有一个名为 MethodA 的公共方法,则按下面的示例所示调用该方法:
aehyok
2018/08/31
8910
【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )
静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ;
韩曙亮
2023/10/15
2.3K0
【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )
C++ 静态数据成员与静态成员函数
本文介绍了静态数据成员和静态成员函数的概念、特点以及用法,并给出了一个示例代码。静态数据成员和静态成员函数是C++中比较重要的概念,在开发中经常用到。
chaibubble
2018/01/02
1.7K0
C++(静态成员)
static在C语言中的作用,简要地说就是为了让同名的变量或函数在各个文件之间彼此隔绝,打消他们之间的互相影响。而在C++中,static除了这样的作用之外,还多了一项非常重要的功能——定义类的属性和行为,这是基于对象程序设计的一个不可或缺的要素。
用户2617681
2019/08/08
8520
类的静态成员变量
类的静态成员要在类内声明,类外定义。这样做的原因参照 here类外定义时又要注意哪些内容呢?不在头文件中定义静态成员变量这是“尽量不在头文件中定义变量”(参考)的延伸。错误的代码示例class.h#ifndef __CLASS_H#define __CLASS_Hclass A{ static int var;};int A::var = 1;#endifmain.cppint main() { return 0;}test1.cpp#include "class.h"test2
村子里的设计师
2023/05/20
1.3K0
C++使用非常量静态成员(non-const static data member)
非常量静态成员的错误使用方法 静态成员只跟类有关,是所有对象共有的属性,如果在类中初始化则意味着每个对象都初始化一次,这样就需要非静态成员了。非常量静态成员函数不可以在类中初始化,一定要在类外把类名作为命名空间而初始化,但放在private里又只能在类里初始化,这种操作是无法实现的。但C++支持在类里定义非常量静态成员函数,如"static double average(){...};"。 误区二:在函数体内对非常量静态成员变量初始化。(xcode有提示)正确的方法是将初始化语句放到函数体外定义(在类中只有声明),然后在函数内以class::member的方式调用。
gojam
2019/05/14
6.7K0
C++静态成员变量和静态成员函数小结
静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点: 1.静态数据成员的定义。 静态数据成员实际上是类域中的全局变量。所以,静态数据成员需要在类外定义(初始化),而不应该被放在类声明中。 原因是类声明中只是描述如果分配内存并不会真正的分配内存,而定义是一定要分配
用户1215536
2018/02/05
2.1K0
静态成员函数访问非静态数据成员【C++】
详解:由于静态数据成员属于本类的所有对象共享,不属于特定类对象,因此在未产生类对象时作用域就可见,即:在未产生类的实例时,就可以对它进行操作。
攻城狮杰森
2022/06/03
1.5K0
【C++】静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 | 静态成员变量初始化 | 静态成员变量访问 | 静态成员变量生命周期 )
静态成员归属 : 静态成员变量 是特殊的成员变量 , 是 类所有的 成员 , 而不是对象所有的成员 ;
韩曙亮
2023/10/15
2.5K0
【C++】静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 | 静态成员变量初始化 | 静态成员变量访问 | 静态成员变量生命周期 )
C++之静态成员
对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。(类的每一个实例都共享这一个成员)无论这个类的对象被定义了多少个,静态数据成员在程序中只有一份拷贝,由该类型的所有对象共享访问。(包括派生类的对象)。这种需求我们还是经常有的。
zy010101
2020/04/08
5500
点击加载更多

相似问题

如何访问类的静态成员?

2339

TypeScript的公共静态常量是什么?

22.3K

初始化私有静态成员?

2488

什么是静态方法,什么是成员变量?

0157

Python类静态方法

2494
相关问答用户
某公司 | 程序员擅长1个领域
腾讯云TDP | 先锋会员擅长2个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档