Mã sau có hợp pháp C++ hay không?Khai báo nhưng không xác định cấu trúc bên trong/lớp - hợp pháp C++ hay không?
class Foo
{
class Bar;
void HaveADrink(Bar &bar);
void PayForDrinks(Bar &bar);
public:
void VisitABar(int drinks);
};
class Foo::Bar
{
public:
int countDrinks;
};
void Foo::HaveADrink(Bar &bar)
{
bar.countDrinks++;
}
void Foo::PayForDrinks(Bar &bar)
{
bar.countDrinks = 0;
}
void Foo::VisitABar(int drinks)
{
Bar bar;
for (int i=0; i<drinks; i++) HaveADrink(bar);
PayForDrinks(bar);
}
Cả Visual C++ và GCC đều chấp nhận nó, tuy nhiên mã có vẻ lạ và tôi ghét phải từ chối bởi một số trình biên dịch trong tương lai. Tuy nhiên, mô hình có vẻ hữu ích với tôi để giảm phụ thuộc thời gian biên dịch - Tôi thường sử dụng nó để khai báo cấu trúc được sử dụng để truyền một số ngữ cảnh (một loạt các biến) được chia sẻ giữa một vài hàm trong cùng một tệp cpp, và theo cách này tôi không phải giới thiệu định nghĩa "ngữ cảnh" vào giao diện công cộng.
Tôi chỉ đang trong quá trình tạo một vài lớp ngữ cảnh, vì vậy tôi cũng quan tâm. BTW, làm cho countDrinks có thể truy cập công cộng. – stefaanv
Tôi có giả định rằng bạn đang đề cập đến định nghĩa 'class Foo :: Bar' không? – MSalters