2013-08-09 25 views
5

Tôi nhận được một số hành vi lạ với C++ 11 std::array. Khi tôi cố gắng biên dịch với std::array<std::tuple<int, float>, 6> myTuples; như là một biến thành viên, tôi nhận được các lỗi này:std :: lỗi kiểu không hoàn chỉnh mảng với mảng std :: tuple

mingw32\4.7.2\include\c++\array:-1: In instantiation of 'struct std::array<std::tuple<int, float>, 6u>':
mingw32\4.7.2\include\c++\array:77: error: 'std::array<_Tp, _Nm>::_M_instance' has incomplete type

Tôi không chắc chắn nếu có điều này thay đổi bất cứ điều gì nhưng lớp nó là trong là một lớp mẫu bắt nguồn từ một lớp mẫu khác. Tham số mẫu là một số unsigned int xác định kích thước của một lớp bảo vệ std::array trong lớp cơ sở mà tôi tham chiếu trong lớp dẫn xuất using Base<param>::m_array;. Lớp dẫn xuất có các loại glm::vec3/dmat4/quat khác nhau và sử dụng chức năng cố định OpenGL glBegin(GL_QUADS); nội dung. Tôi đang sử dụng SDL-1.2.15 để tạo ngữ cảnh OpenGL. Tôi nghĩ hầu hết điều đó là không liên quan, nhưng có lẽ không. Tôi có thể dán mã, nhưng tất cả mọi thứ được kết nối với nhau, do đó, nó chỉ có thể được biên dịch như một toàn thể (được phân phối giữa các nguồn là khoảng một nghìn hoặc nhiều dòng).

Tuy nhiên, khi tôi bao gồm cùng một dòng này trong this ideone example, trong các trường hợp rất giống nhau, nó biên dịch hoàn toàn tốt đẹp. Tôi đã kiểm tra rằng nó không chỉ là trình biên dịch của tôi (MinGW g ++ phiên bản 4.7.2) bằng cách biên dịch tương tự trên trình biên dịch của tôi với dòng lệnh g++ -Wall -std=c++11

Có ai biết tại sao tôi có thể gặp lỗi này không? Tôi đã có một số vấn đề trước khi trình biên dịch bị lỗi khi phân tích cú pháp việc gán std::array (sử dụng array = {{a,b,c}}; cho tham số mặc định), nhưng lần này lỗi trình biên dịch của nó không bị lỗi.

+4

Bạn đã thực hiện '#include '? – dunc123

+3

Tôi có thể tạo lại lỗi tương tự nếu bạn quên bao gồm ''. Trên thực tế, cùng một lỗi chính xác với g ++ 4.7 '/usr/include/c++/4.7/array:77:43: lỗi: 'std :: mảng <_Tp, _Nm> :: _ M_instance' chưa hoàn thành loại' –

+0

Đăng [SSCCE] (http://sscce.org/). – juanchopanza

Trả lời

10

Theo yêu cầu, bạn quên bao gồm <tuple> đó là lý do trình biên dịch phàn nàn về loại không đầy đủ.

+3

Trong trường hợp của tôi, tôi quên thêm '#include ' –

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