我使用的是c++;14或者我使用结构的代码无效? 我正在重读C++,一直遵循一个没有实际问题的教程。然而,我有一个关于结构的章节,它说在c++14中,您可以使用非静态初始化和统一初始化。根据:

我使用的是c++;14或者我使用结构的代码无效? 我正在重读C++,一直遵循一个没有实际问题的教程。然而,我有一个关于结构的章节,它说在c++14中,您可以使用非静态初始化和统一初始化。根据:,c++,c++11,compiler-errors,c++14,C++,C++11,Compiler Errors,C++14,然而,在C++14中,这一限制被取消,两者都可以使用。 如果两者都提供,则初始值设定项列表/统一初始化 语法优先。在上面的例子中,三角形x是 使用长度和宽度2.0初始化 我的密码是:- struct Triangle { double length = 1.23; // non-static member initialization double width = 2.45; }; int Triangular() { Triangle x{ 2.0, 2.0 }; // un

然而,在C++14中,这一限制被取消,两者都可以使用。 如果两者都提供,则初始值设定项列表/统一初始化 语法优先。在上面的例子中,三角形x是 使用长度和宽度2.0初始化

我的密码是:-

struct Triangle
{
    double length = 1.23; // non-static member initialization
    double width = 2.45;
};

int Triangular()
{
Triangle x{ 2.0, 2.0 }; // uniform initialization

return 0;
}

...... 
int main() ......
但是,我无法编译它(我在Windows7上使用Code::Blocks)。如果我删除非静态初始化并使用(即删除
=1.23
=2.45
),则它会编译:-

struct Triangle
{
    double length; // non-static member initialization
    double width;
};

int Triangular()
{
Triangle x{ 2.0, 2.0 }; // uniform initialization

return 0;
}

...... 
int main() ......
我的第一个想法是我没有c++14。因此,我遵循了这一点,似乎将编译器设置为c++14(一个例外是没有
make.exe
,因此make程序是
mingw32 make.exe
(根据设置/编译器/工具链可执行文件


我有:- GNU GCC编译器

编译器设置为:-

-std=c++14编译器标志

-std=c++98-std=c++0x-std=c++11作为替代项

工具链可执行文件如下:-

gcc.exeC编译器 <强> G++.exe <强> C++编译器 g++.exe动态库链接器 ar.exe用于静态库的链接器 GDB/CDB调试器:默认值 windres.exe资源编译器 mingw32 make.exemake程序

项目构建选项都是空的(因此我假设使用了Code::Block设置)


当我编译失败的代码(第一个带有非静态初始化的代码)时,我得到以下结果:-

构建日志

所以我相信我不是在使用无效代码,就是不是在使用c++14而是在使用c++11编译。问题是其中之一,还是其他问题

Triangle x{ 2.0, 2.0 };
上面这一行正试图执行
三角形
的聚合初始化。但是,在C++11中,非静态数据成员初始值设定项或默认成员初始值设定项的存在阻止了
三角形
成为聚合,初始化将失败


这个规则是,现在允许聚合有默认成员初始化器。看起来你的编译器还没有支持。你的例子在一个符合C++ 14编译器上。

你的GCC编译器版本不能支持C++ 14…只是猜测,因为我不知道C++ 14中的这个特性,或者C++的任何其他版本。自加载可能是的,一个更高版本的MinGW。也许这会起作用。我不需要这个功能,而是可以从解决问题中学习。我相信编译器是问题所在。但是,我现在面临一个问题,我认为我的windows 7/版本有一个64位处理器。也就是说,我得到了
c:/MinGW/MinGW/bin/./lib/gcc/x86_64-w64-mingw32/6.1.0/./../../../../../../../x86_64-w64-mingw32/bin/ld.exe:i386输入文件``obj\Debug\myotherfile.o'的体系结构与i386:x86-64输出collect2.exe不兼容:错误:ld返回1退出状态
我想我将恢复到提供的MinGW,而不是按照c++11使用这两种初始化类型。也许当我得到m熟悉C++。我会看解决这个问题。@ MikeT,你可以尝试从64下载MinGW toolchain。我从来没有遇到过麻烦。好了,就像前面的评论一样,这个问题似乎是与对象文件有关的。需要干净。
-------------- Build: Debug in gettingStarted (compiler: GNU GCC Compiler)---------------

g++.exe -Wall -fexceptions -g -std=c++14  -c "D:\C++ Projects\gettingStarted\main.cpp" -o obj\Debug\main.o
D:\C++ Projects\gettingStarted\main.cpp: In function 'int Triangular()':
D:\C++ Projects\gettingStarted\main.cpp:24:10: warning: unused variable 'x' [-Wunused-variable]
 Triangle x{ 2.0, 2.0 }; // uniform initialization
          ^
g++.exe  -o bin\Debug\gettingStarted.exe obj\Debug\main.o obj\Debug\myotherfile.o   
Output file is bin\Debug\gettingStarted.exe with size 1.07 MB
Process terminated with status 0 (0 minute(s), 1 second(s))
0 error(s), 1 warning(s) (0 minute(s), 1 second(s))
Triangle x{ 2.0, 2.0 };