C ++ Struct成员字符串数组,期望一个表达式

时间:2016-01-16 23:25:56

标签: c++ arrays string struct

我的字符串数组给出错误“预期的表达式”,我不明白为什么:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

typedef struct {
    string title;
    string cells[];
} menu;

menu mainm, dpe, dps, dpes, tec, rt, wc, mc, mn, cl, imp, dr, df, pd, ts;

int main() {
    mainm.title = "Menu Principal";
    mainm.cells[] = { "Dispositivos de Entrada", "Dispositivos de Saida", "Dispositivos de Entrada e Saida" };

}

错误发生在mainm.cells []

  

严重级代码说明项目文件行   错误(活动)预期表达式Arpsis f:\ C ++ \ Arpsis \ Arpsis \ testes.cpp 16

1 个答案:

答案 0 :(得分:3)

在C ++中,这一行格式不正确:

 mainm.cells[] = { "Dispositivos de Entrada", "Dispositivos de Saida", "Dispositivos de Entrada e Saida" };

当您声明数组时,您可以使用[]来表示这一事实,但如果它不是声明的一部分,并且您没有对其进行索引,那么您就不应该这样做在引用数组时完全使用[]

(正如Jonathan Potter指出的那样,结构定义也是不正确的:

typedef struct {
    string title;
    string cells[];
} menu;

考虑一下 - 如果这应该是菜单结构的完整定义,那么应该可以使用sizeof来确定其大小。但是,如果cells的大小尚未确定,那么它还不可能。

当您使用项列表初始化数组时,可以使用[]而不指定大小,因为编译器将为您计算项目。但是,如果你不这样做,它就无法发挥作用。)

将代码更改为

mainm.cells = { "Dispositivos de Entrada", "Dispositivos de Saida", "Dispositivos de Entrada e Saida" };

提供了更易理解的错误消息:

http://coliru.stacked-crooked.com/a/6279ed5446008616

  

main.cpp:16:17:错误:从初始化列表

分配给数组

初始化数组时,您可以使用支撑表达式初始化表单,但在初始化之后,您不能再这样做了,您需要使用循环或memcpy或其他东西。< / p>

如果您使用的是C ++ 11标准,并且使用向量而不是数组,则可以执行非常接近您想要的操作,例如:http://coliru.stacked-crooked.com/a/e7d6964388bf42ac

或者如果您想坚持使用数组,可以使用std::array并使用std::copy通过复制来初始化它,就像这里一样。 http://coliru.stacked-crooked.com/a/3caac3676c94d913