C++结构二维字符串成员初始化

C++结构二维字符串成员初始化,c++,arrays,string,initialization,structure,C++,Arrays,String,Initialization,Structure,请点击此处: 我想不出这个代码有什么问题。 我尝试了很多方法。我甚至将结构成员更改为2d字符数组,但遇到了相同的问题。请提供帮助 汇编信息: prog.cpp:在函数“int main”中: 错误:应在“{”标记之前使用主表达式 错误:在“{”标记之前应为“;” 错误:应在“{”标记之前使用主表达式 错误:在“{”标记之前应为“;”初始化s[26]数组的方式仅适用于声明 以下是如何在代码中执行此操作: #include<string> #include<iostream>

请点击此处:

我想不出这个代码有什么问题。 我尝试了很多方法。我甚至将结构成员更改为2d字符数组,但遇到了相同的问题。请提供帮助

汇编信息:

prog.cpp:在函数“int main”中: 错误:应在“{”标记之前使用主表达式 错误:在“{”标记之前应为“;” 错误:应在“{”标记之前使用主表达式 错误:在“{”标记之前应为“;”初始化s[26]数组的方式仅适用于声明

以下是如何在代码中执行此操作:

#include<string>
#include<iostream>
using namespace std;

struct letter
{
    string lines[5];
}s[26];

int main()
{
    //struct letter s[25];
    s[0].lines =      // error while initializing here
    {
        "..*..",
        ".*.*.",
        ".***.",
        ".*.*.",
        ".*.*."
    };

    s[1].lines[5] =   // also if I do this
    {
        ".**..",
        ".*.*.",
        ".***.",
        ".*.*.",
        ".**.."
    };

  return 0;
}
或者更好,如果你真的不需要字母结构:

struct letter
{
    string lines[5];
};

letter s[26] =
{
    {
        "..*..",
        ".*.*.",
        ".***.",
        ".*.*.",
        ".*.*."
    },
    {
        ".**..",
        ".*.*.",
        ".***.",
        ".*.*.",
        ".**.."
    }
};

我从main function的开始就面临这个问题。初始化结构字符串时出错。只有在同一行中声明和定义数组时,数组的初始值设定项列表才有效,如字符串s[2]={a,b}@texasbruce:请在确认之前检查!:@user3507787:他是正确的:。关键部分实际上是数组不能通过运算符=.复制。@MooingDuck:我放置了两个版本的block来显示差异。我知道它不能被赋值。请检查s[1]的第二种赋值类型。谢谢。我想投票,但我没有15分。我喜欢这些策略,但这并不能完整回答:@user3507787:为什么不?问题说明了这段代码有什么问题。答案说明了在声明时初始化数组,这意味着这段代码是错误的,因为您正在初始化数组声明之后。答案还向您展示了如何做,此外,还建议了一个可能适合您需要的简化版本。因此,我认为这是对您问题的一个非常完整的回答。@barakmanos:我不知道这段代码有什么错,但我确实知道我无法找出这段代码有什么错。。我认为答案是正确的如果提到他的代码失败的原因,将会有所改进。@barakmanos:1你不能指定义而不是声明。2你只能在定义时初始化任何东西。3如果数组是成员,你可以在其他时间分配给数组,以及一些其他奇怪的情况。@Mooning Duck:1。我实际上是指声明。2.我确实意识到你的声明只能在声明处初始化数组在语义上是不正确的,因为我提到了OP初始化数组答案的具体方式。
string letter[26][5] =
{
    {
        "..*..",
        ".*.*.",
        ".***.",
        ".*.*.",
        ".*.*."
    },
    {
        ".**..",
        ".*.*.",
        ".***.",
        ".*.*.",
        ".**.."
    }
};