我的字符串数组给出错误“预期的表达式”,我不明白为什么:
#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
答案 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