gpt4 book ai didi

C++ 结构成员字符串数组,需要一个表达式

转载 作者:行者123 更新时间:2023-11-28 00:07:18 25 4
gpt4 key购买 nike

我的字符串数组给出错误“Expected an Expression”,我不明白为什么:

#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[]

Severity Code Description Project File Line Error (active) expected an expression Arpsis f:\C++\Arpsis\Arpsis\testes.cpp 16

最佳答案

在 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: error: assigning to an array from an initializer list

当你初始化一个数组的时候,你可以使用大括号表达式初始化形式,但是初始化之后,你不能再这样做了,你需要使用循环,或者memcpy什么的。

如果您使用的是 C++11 标准,并且使用 vector 而不是数组,则可以做一些非常接近您想要的事情,例如:http://coliru.stacked-crooked.com/a/e7d6964388bf42ac

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

关于C++ 结构成员字符串数组,需要一个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34833300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com