2010-07-15 8 views
8

Tôi hiện đang làm việc trên một lớp học với rất nhiều mẫu và có thể xây dựng các bộ của các bộ sẽ làm cho nó dễ dàng hơn nhiềuC++ 0x: các bộ dữ liệu có được phép không?

Nhưng tôi đã cố gắng mã này đơn giản trong MSVC++ 2010:

#include <tuple> 

void main() { 
    auto x = std::make_tuple(std::make_tuple(5, true)); 
} 

Và tôi nhận được một lỗi biên dịch. Vấn đề tương tự xảy ra nếu tôi không sử dụng std :: make_tuple nhưng trực tiếp std :: constructor của tuple

Đây có phải là lỗi của MSVC hoặc các bộ dữ liệu không được tiêu chuẩn cho phép không?

Cảm ơn bạn

+0

Thông báo lỗi chính xác mà bạn đang nhận được là gì? –

+0

Nó rất dài Lỗi ban đầu là: c: \ logiciels \ visual studio 10.0 \ vc \ include \ tuple (127): lỗi C2440: 'initializing': không thể chuyển đổi từ 'std :: tr1 :: _ Nil' thành 'bool' – Tomaka17

+0

Tôi nghi ngờ việc thực thi tuple của Microsoft là đệ quy, nhưng vì Type0 đã là một bộ dữ liệu, nó va chạm với cái gì khác – Tomaka17

Trả lời

4

More điểm dữ liệu:

  • Nếu chúng ta sử dụng std::tr1::tuple và nêu rõ kiểu dữ liệu thay vì sử dụng auto, sau đó Visual C++ 2008 biên dịch mã mà không có lỗi. Cố gắng biên dịch cùng một mã với Visual C++ 2010 dẫn đến lỗi bạn đang thấy.

  • Nếu chúng tôi sử dụng boost::tuple, hãy nêu rõ loại thay vì sử dụng auto, thì Visual C++ 2008 và Visual C++ 2010 đều biên dịch mã mà không có lỗi.

Dường như đây có thể là lỗi triển khai.

3

Bạn đã tạo một bộ tuple chỉ với một thành viên --- không đánh bại mục đích của bộ dữ liệu? Dù sao, tôi nghi ngờ đó là dẫn đến sự mơ hồ.

make_tuple kết hợp suy luận kiểu với cuộc gọi đến hàm tạo tuple. Khi hàm tạo tuple được gọi với một đối số duy nhất cũng là một tuple, có thể là một hàm tạo chuyển đổi phù hợp hơn một hàm tạo gói. Do đó vấn đề.

Tuples of tuples được cho phép. 1-Tuples có thể không.