[英]I am using c++14 or is my code, using structs, invalid?
我正在重溫C ++並且一直在關注一個沒有實際問題的教程。 但是,我有一個關於結構的部分,它說在c ++ 14中你可以使用非靜態初始化和unifrom初始化 。 按照:-
但是,在C ++ 14中,這個限制被解除了,兩者都可以使用。 如果兩者都提供,則初始化列表/統一初始化語法優先。 在上面的例子中,Triangle 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() ......
但是,我無法編譯(我在Windows 7上使用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。 所以我在Code :: Blocks中跟隨了啟用-std=c++14
標志 ,我似乎將編譯器設置為c ++ 14(一個例外是沒有make.exe
所以make程序是mingw32-make.exe
(根據設置/編譯器/工具鏈可執行文件 )。
我有: - GNU GCC編譯器
編譯器設置為: -
-std = c ++ 14編譯器標志
-std = c ++ 98 -std = c ++ 0x -std = c ++ 11 as thecececedes
工具鏈可執行文件: -
gcc.exe C編譯器g ++。exe C ++編譯器g ++。exe鏈接器用於動態庫ar.exe鏈接器用於靜態庫GDB / CDB調試器:默認 windres.exe資源編譯器mingw32-make.exe制作程序
Project Build選項都是空白的(所以我假設使用了Code :: Block設置。)
當我編譯失敗的代碼(第一個帶有非靜態初始化的代碼)時,我得到以下內容: -
構建日志
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:22: error: no matching function for call to 'Triangle::Triangle(<brace-enclosed initializer list>)'
Triangle x{ 2.0, 2.0 }; // uniform initialization
^
D:\C++ Projects\gettingStarted\main.cpp:24:22: note: candidates are:
D:\C++ Projects\gettingStarted\main.cpp:16:8: note: constexpr Triangle::Triangle()
struct Triangle
^
D:\C++ Projects\gettingStarted\main.cpp:16:8: note: candidate expects 0 arguments, 2 provided
D:\C++ Projects\gettingStarted\main.cpp:16:8: note: constexpr Triangle::Triangle(const Triangle&)
D:\C++ Projects\gettingStarted\main.cpp:16:8: note: candidate expects 1 argument, 2 provided
D:\C++ Projects\gettingStarted\main.cpp:16:8: note: constexpr Triangle::Triangle(Triangle&&)
D:\C++ Projects\gettingStarted\main.cpp:16:8: note: candidate expects 1 argument, 2 provided
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))
使用第二個代碼(刪除非靜態初始化)我只是得到一個關於x沒有被使用的警告(我可以管理它),如下所示: -
構建日志
-------------- 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))
所以我相信我要么使用無效代碼,要么我沒有使用c ++ 14進行編譯,而是使用c ++ 11。 這個問題是其中之一,還是別的什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.