如何在C++中的类中定义常量数组
How do I define a constant array in a Class in C++?
我希望在类中定义一个数组,并将类的变量设置为数组的元素。以下实现导致分段故障:
class Grade {
char MAP[];
char *letter;
public:
Grade();
~Grade();
void set(int);
};
Grade::Grade(){
letter = new char;
*letter = ' ';
MAP[0] = 'A';
MAP[1] = 'B';
MAP[2] = 'C'; // result in segmentation fault
MAP = { 'A', 'B', 'C'}; // result in segmentation fault
}
Grade::~Grade(){
delete letter;
delete percent;
}
void Grade::set(int a){
*letter = MAP[a];
}
我该怎么修?
最快的方法是将char MAP[];
更改为char MAP[3];
代码中还有其他有趣的内容。
1) 它不会按照给定的方式编译(您永远不会定义百分比是什么)
2) 如果有人向映射范围之外的集合函数发送"int a",会发生什么?(IE:56而不是0、1或2)?
假设代码要做什么,似乎最简单的修复方法是替换当前的
char MAP[];
char *letter;
...
void Grade::set(int a){
*letter = MAP[a];
}
带有
char letter_;
...
void Grade::set( int const grade )
{
// Assuming grade in range 1 through 5 inclusive.
letter_ = "ABCDEF"[grade - 1];
}
顺便说一下,为宏保留所有大写标识符是个好主意。这样可以最大限度地减少意外文本替换的可能性。而且,它对眼睛更容易。
如果是数组,编译器要求您显式声明数组中的元素数量。这是为了确保在执行之前确定数组的大小。
因此,按照以下char MAP[];
声明数组总是会导致编译错误。
你的问题的一个可能的解决方案是[如David D所述]将其声明为char MAP[3]
;
但是,如果您的要求是动态分配,您可以将其声明为
char *MAP;
并且在构造函数内部按如下方式分配所需的内存:
MAP=新字符[n];
其中n表示数组中需要的元素数。
注意:如果动态声明数组,则需要使用
delete[] MAP;
在销毁期间完全释放内存。
相关文章:
- 定义常量变量的最佳方法
- 如何在C++中定义常量指针数组?
- 如何在C++中正确定义常量
- 在哪里定义常量促销
- 在 C# 中定义常量
- 替换 C 代码宏并在C++代码中定义常量
- 为什么我可以在较小的范围内重新定义常量
- 如何在C++中打印已定义常量的内存地址
- 使用来自其他方法和 #define 的函数定义常量
- 如何使用命名变量定义常量右值引用参数的默认值
- 定义常量 scope_refptr() 是否有意义
- 定义常量变量是否会使您的程序更小
- 我是否应该为代码中的重复文字定义常量
- C++ 对已定义常量的未定义引用
- 在标头中定义常量字符串数组
- 在库中定义常量变量 pi
- 自定义迭代器和自定义常量迭代器之间的转换
- 定义常量变量在头文件中不起作用
- 如何在C++中定义常量
- 如何在类的头文件中定义常量双精度?