2014-04-07 166 views
1
#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; 
} 

入住这里:Ideone LinkC++结构2D串成员初始化

我无法弄清楚什么是错的这个代码。 我尝试了很多方法。我甚至将结构成员更改为2d char数组,但得到同样的问题。请帮忙!

编译的信息:

prog.cpp:在函数 '诠释主()':
错误:前 '{' 令牌
误差预期主表达式:预期 ';' '{'标记
错误:预期的'{'标记之前的主表达式
错误:预期';'在'{'标记之前

+0

我面临的问题只是从主要功能开始。初始化结构字符串时出错。 – Vanessa

+0

数组的初始化列表只有在你在同一行中声明和定义数组时才有效,比如'string s [2] = {“a”,“b”}' – texasbruce

+0

@texasbruce:请确认之前检查! :) – Vanessa

回答

0

您初始化s[26]数组的方式仅适用于声明。

这里是你如何能做到这在你的代码:

struct letter 
{ 
    string lines[5]; 
}; 

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

甚至更​​好,如果你不真正需要的letter结构:

string letter[26][5] = 
{ 
    { 
     "..*..", 
     ".*.*.", 
     ".***.", 
     ".*.*.", 
     ".*.*." 
    }, 
    { 
     ".**..", 
     ".*.*.", 
     ".***.", 
     ".*.*.", 
     ".**.." 
    } 
}; 
+0

谢谢。我想积极参加,但我没有15分。那么我喜欢这些策略,但是这并不能完成整个答案:) – Vanessa

+0

@ user3507787:为什么不呢?这个问题指出“这个代码有什么问题”。答案是“在声明时初始化你的数组”,这意味着这段代码是错误的,因为你在**声明之后初始化你的数组**。答案还告诉你如何去做,另外,建议一个可能适合你需求的简化版本。所以我会说这是对你的问题的一个非常完整的回应。 –

+0

@barakmanos:我没有看到“这段代码有什么问题”,但我确实看到“我无法弄清楚这段代码出了什么问题”。我认为通过提及_why_他的代码失败可以改善答案。 –