2012-05-03 18 views
6

Tôi đã nói những điều sau đây là có thể do sự thay đổi trong C++ 11:C++ 11 kêu gọi xây dựng từ constructor của cùng loại lớp

class SomeType { 
int number; 

public: 
SomeType(int new_number) : number(new_number) {} 
SomeType() : SomeType(42) {} 
}; 

Nhưng khi tôi cố gắng xây dựng tôi nhận được một lỗi:

"SomeType" is not a nonstatic data member or base class of class "SomeType" 

error C2614: 'SomeType' : illegal member initialization: 'SomeType' is not a base or member 

Tính năng này chưa được hỗ trợ trong Visual Studio 2010 chưa? Tôi có cần phải cấu hình một cái gì đó để có được điều này để xây dựng? Chuyện gì thế?

+1

Để tham khảo trong tương lai, chúng được gọi là _delegating constructors_. – ildjarn

+0

bằng cách này, nó được hỗ trợ trong gcc (mingw-w64, devC++, mã :: khối, mingw, DJGPP) –

+1

@JimMichaels: báo cáo IDE (mã :: khối) là một chút đáng ngạc nhiên. Tôi sử dụng code :: blocks và clang ... –

Trả lời

10

Nó không được hỗ trợ trong VS2010. Hầu hết các tính năng C++ 11 không được hỗ trợ trong VS2010 (hoặc VS11 cho vấn đề đó)

Here là biểu đồ các tính năng được hỗ trợ trong VC10 và VC11.

+0

Bực bội! Cảm ơn các liên kết. – user974967

+1

Hãy nhớ rằng VS2010 xuất hiện lâu trước khi tiêu chuẩn dự thảo C++ 11 thậm chí còn gần hoàn thành. Tôi muốn nói rằng chúng tôi may mắn là nó hỗ trợ những tính năng của nó. Đặc biệt, hỗ trợ Lambda là một ơn trời. – brendanw

+3

@brendanw: C++ 11 đã hoạt động khá lâu. GCC 4.3 đã hỗ trợ cho các tham chiếu rvalue và các mẫu variadic (ví dụ) vào năm 2008, 3 năm trước khi VS10 được vận chuyển (Và VS10 vận chuyển * mà không hỗ trợ mẫu * variadic, và bây giờ, vào năm 2012, VS11 vẫn không hỗ trợ cho nó.) GCC đã có lambdas trong năm 2010, một năm trước khi VS10 đã làm (và lambda trong VS10 là lỗi). Bây giờ trong năm 2012, VS11 sắp sửa xuất xưởng với sự hỗ trợ C++ 11 kém, trong khi GCC 4.7 được phát hành vào tháng 3 với sự hỗ trợ gần như đầy đủ của C++ 11. Tôi không nghĩ may mắn có liên quan đến nó. – GManNickG

Các vấn đề liên quan