【问题标题】:How to assign value to a struct like initializing如何为结构赋值,如初始化
【发布时间】:2013-12-18 14:23:05
【问题描述】:

假设我在 C++11 中有一个结构:

typedef struct
{
   int val1;
   int val2;
} Mystruct;

我可以这样初始化它并且它可以工作:

Mystruct a = {1,2};

但是我怎样才能以同样的方式重新分配值:

Mystruct a = {1,2};
...................
a = {3,4};  //this line doesn't work

更新 1:

这是我从 Visual Studio 复制出来的确切代码,也是我编写的唯一代码:

#include "stdafx.h"

struct Mystruct
{
   int val1;
   int val2;
};

int _tmain(int argc, _TCHAR* argv[])
{
Mystruct a = {1,2};
a = {3,4};  //this line doesn't work

return 0;
}

错误是:

错误 C2059:语法错误:'{' c:\workspace\trycplus\trycplus\trycplus.cpp

错误 C2143:语法错误:缺少 ';'在'{'之前 c:\workspace\trycplus\trycplus\trycplus.cpp

错误 C2143:语法错误:缺少 ';'在'}'之前 c:\workspace\trycplus\trycplus\trycplus.cpp

更新 1:

我将我的 Visual Studio 2012 更新为 Nov 2012 CTP,并将平台工具集更改为 :

Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012),赋值仍然不起作用

【问题讨论】:

  • Works for me,一旦我修正了错字并将片段组装成可编译的东西。究竟出了什么问题?你确定你(a)在必要时启用 C++11 支持,并且(b)在函数内部进行赋值吗?您能否发布一个演示问题的最小完整示例?
  • 如果您正在使用 C++,为什么要使用 typedef struct
  • 这是为了 c 和 C++ 之间的兼容性。在这种情况下,有或没有没有任何区别。
  • @crashmstr,它可以帮助避免细微的命名错误(参见 thisthis),但根本没有多少人这样做。
  • 统一初始化在 VS2012 RTM 中尚不可用。第一个支持它的版本是 2012 年 11 月的 CTP(不要使用它)和 VS2013 RTM。

标签: c++ visual-c++ visual-studio-2012


【解决方案1】:

在 C++11 中从初始化列表赋值可以正常工作:

a = {3,4};

live demo here

顺便说一句,你不需要繁琐的typedef 语法,你需要struct 而不是strut

struct Mystruct
{
   int val1;
   int val2;
};

【讨论】:

  • 只需a = {3,4}; 也应该可以。 @Giswin,哪个编译器? MSVC12 支持统一初始化。
  • IIRC,如果您在 MyStruct 上定义了任何构造函数,它将不起作用。
  • @Dan,如果其中一个需要两个整数,它会。
  • @Giswin,那么您必须使用 2012 CTP 编译器或升级到 2013 才能使用此功能。后者更可取。
  • 这在 Visual Studio C++ 中绝对行不通。也许你是对的,克里斯。
【解决方案2】:

如果您使用的是 C++11,则不需要#include "stdafx.h"int t_main(int argc, _TCHAR* argv[])。 t_main 带有您的程序不需要的命令行参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多