为什么我不能在结构中初始化字符数组
Why I cannot initialize char array in struct
我尝试通过以下方式在结构声明中初始化字符数组。但它无法编译并显示错误消息。请让我知道为什么它无法编译。
#include <iostream>
struct A {
const char value_in_struct[] = "a"; // this line gives me a error message.
};
void t(void) {
const char value[] = "a"; // this line was ok at compiling
std::cout << "value = " << value << std::endl;
}
我从 gcc 收到以下错误消息。
../static_constexpr_array.hpp:16:33: error: initializer-string for array of chars is too long [-fpermissive]
const char value_in_struct[] = "a";
^
谢谢你为我利用时间。
问题是数组范围无法从类内初始值设定项自动推断出来。clang 生成的错误消息非常清楚(请参阅此处(:
prog.cc:4:34: error: array bound cannot be deduced from an in-class initializer
const char value_in_struct[] = "a";
^
这是为什么呢?类内初始值设定项可由构造函数的成员初始值设定项列表重写。那么,如果构造函数选择用其他东西初始化数组怎么办?在您的情况下,可以使用大括号括起来的初始值设定项列表覆盖初始值设定项,如下所示(实际上是聚合初始化((请参阅此处(:
A a = {"abc"};
由于最终初始值设定项无法在编译时确定,因此编译器无法推断数组范围。
为数组提供显式范围会使代码编译(请参阅此处(。
#include <iostream>
struct A {
const char value_in_struct[2] = "a";
};
void t(void) {
char value[] = "a";
std::cout << "value = " << value << std::endl;
}
struct A {
const char value_in_struct[] = "a";.
};
这是错误的。这是数组类成员还是对象成员?如果是类成员,则必须这样写:
static constexpr char value_in_struct[] = "a";
静态,因为它是类成员。Constexpr,因为你在类定义中初始化它。
如果它是对象成员,则无法在类定义中初始化它。
感谢您提出问题,当您陈述常量 char var[] = "某事"时;这意味着,您正在声明 char 类型数组的变量 var,其长度与初始化时分配给字符串的长度相同。例如。对于上述情况,其 10。
当您可以初始化变量时,即当您在 main 或任何其他函数中声明它时,该语句将生效。
现在,代码的结构部分正在声明一个结构体 A,其中您在其中声明变量或常量字符 [],在这里您无法初始化它,因此出错。此外,如果您使用此类成员变量声明结构并尝试创建实例,它将给出编译错误,因为它的 const 类型,我们需要在创建实例时对其进行初始化,这是不可能的。
解决方法是在结构中将成员变量作为char *类型并相应地分配它,这样您将能够实现所需的目标。
我在同一行尝试了一些代码,并用行注释,它会给出编译错误..请参阅,希望对您有所帮助。
#include <iostream>
using namespace std;
struct B{
const char mem_var[];
};
struct A {
const char * value_in_struct ; // this line gives me a error message.
A(char *s):value_in_struct(s){}
A() { value_in_struct = NULL;}
};
void t(void) {
const char value[] = "att"; // this line was ok at compiling
std::cout << "value = " << value << std::endl;
//value[2] = 's'; // gives error
}
int main(){
A a(const_cast< char *>("abc"));
A b ;
b.value_in_struct = "bbc";
cout <<"a: "<<a.value_in_struct << endl;
cout <<"b: "<<b.value_in_struct << endl;
t();
//B bb; gives error for not initizaling mem_var
return 0;
}
自从我使用 c++ 以来已经有一段时间了,但我建议尝试一下:
const char[] value_in_strict = {'a'};
- 使用 cin.get() 初始化字符数组
- 当我们不使用空字符显式初始化字符数组时,字符串的长度是多少?
- 从 C++ 中的位表示形式初始化字符
- 初始化字符*
- 澄清了 strcpy() 在像这样初始化字符数组时的工作 *Arr.
- 使用 auto 关键字初始化字符数组
- make_unique值是否初始化字符数组
- 正在从常量初始化字符数组
- 在类构造函数中初始化字符矩阵
- 如何使用整数值中的数字符号初始化字符数组
- 如何初始化字符的 2D 数组
- 初始化字符数组 - C 和 C++
- 无法初始化C++字符
- 如何使用字符串(字符数组)初始化字符指针,而不是使用整数数组初始化 int 指针
- 是否可以使用有条件选择的字符串文本初始化字符数组
- 初始化字符时空字符的重要性
- 如何使用十六进制数初始化字符数组
- 断言错误,即使在使用 new 初始化字符指针后也是如此
- 如何在C++中使用字符串文字初始化字符的动态数组
- 有没有办法使用位初始化字符