Tại sao mã sau không biên dịch theo g ++ (C++ 14), MSVC (C++ 14), hoặc ARM (C++ 03)?Tại sao enum này không chuyển đổi thành int?
Trường hợp Lỗi được đặt tên gọi hàm tạo số nguyên, nhưng cá thể Lỗi ẩn danh không giải quyết được.
class Error
{
public:
Error(int err) : code_(err) {}
const int code_;
};
enum Value
{
value_1
};
int main()
{
// compiles
Error e(value_1);
// does not compile under G++, ARM, or MSVC
Error(value_1);
}
Ví dụ lỗi dưới G ++: (Coliru link)
g++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
main.cpp: In function 'int main()':
main.cpp:19:18: error: no matching function for call to 'Error::Error()'
Error(value_1);
^
main.cpp:4:5: note: candidate: Error::Error(int)
Error(int err) : code_(err) {}
^~~~~
main.cpp:4:5: note: candidate expects 1 argument, 0 provided
main.cpp:1:7: note: candidate: constexpr Error::Error(const Error&)
class Error
^~~~~
main.cpp:1:7: note: candidate expects 1 argument, 0 provided
main.cpp:1:7: note: candidate: constexpr Error::Error(Error&&)
main.cpp:1:7: note: candidate expects 1 argument, 0 provided
Chỉnh sửa tiêu đề: có không có ** cast ** trong mã này; câu hỏi là về một ** chuyển đổi **. –
Có thể trùng lặp [Phần nào của tiêu chuẩn C++ cho phép khai báo biến trong dấu ngoặc đơn?] (Https://stackoverflow.com/questions/45991094/which-part-of-the-c-standard-allow-to-declare- biến-trong-dấu ngoặc đơn) –
Nếu không có cả hai bạn chỉ định trình biên dịch đã làm/không hoạt động, báo cáo không thú vị. Nó có thể là một phần mở rộng, nhưng tôi đã không phân tích ngữ pháp. –