2009-11-16 26 views
8

Số tiền tối thiểu để tạo vùng chứa tùy chỉnh sẽ hoạt động với macro fort Qt là bao nhiêu?Yêu cầu vùng chứa tùy chỉnh để làm việc với sự hỗ trợ của Qt

Tôi có điều này cho đến nay

template< class T > 
class MyList 
{ 
public: 
    class iterator 
    { 
    public: 

    }; 
    class const_iterator 
    { 
    public: 
    inline iterator& operator++() 
    { 
     return *this; 
    } 
    }; 
}; 

và tôi nhận được này lỗi biên dịch:

4>.\main.cpp(42) : error C2100: illegal indirection 
4>.\main.cpp(42) : error C2440: 'initializing' : cannot convert from 'MyList<T>::const_iterator' to 'int' 
4>  with 
4>  [ 
4>   T=int 
4>  ] 
4>  No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 

khi tôi cố gắng biên dịch này:

MyList<int> mylst; 
    foreach(int num, mylst) 
    qDebug() << num; 
+5

Lưu ý rằng foreach tạo ra bản sao của container, đây không phải là một vấn đề lớn kể từ khi lớp học của họ thực hiện bản sao trên ghi nhưng nó có thể là dành cho bạn! –

Trả lời

10

tôi đã bỏ qua triển khai giả tôi đã sử dụng nhưng tính năng này được biên dịch cho tôi:

template< class T > 
class MyList 
{ 
public: 
    class const_iterator 
    { 
    public: 
     const T& operator*(); 
     bool operator!=(const const_iterator&) const; 
     const_iterator& operator++(); 
    }; 

    const_iterator begin() const; 
    const_iterator end() const; 
}; 
1

Là tuyên bố từ chối trách nhiệm, tôi không chắc chắn liệu điều này có thể thực hiện được hay không.

Kiểm tra định nghĩa của foreach trong qglobal.h. Có vẻ như bạn có thể cần xác định phương thức beginend.

Trên hệ thống của tôi nó được tìm thấy tại $QtInstallDir/src/corelib/global/qglobal.h

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