2014-09-03 11 views
5

Tôi có ứng dụng iOS sử dụng lớp C++ từ MPL có tên 'square.h' và bất cứ khi nào tôi tạo ứng dụng Xcode ném lỗi này -C++ - Không thể thêm đối số mặc định vào định nghĩa ngoài dòng của thành viên mẫu lớp

Mặc định lập luận không thể được thêm vào một nét out-of-line của một thành viên của một lớp mẫu

Bây giờ, sự hiểu biết của tôi về C++ cú pháp là rất ít, vì vậy những gì hiện lỗi này nghĩa là?

Dòng vấn đề là bên dưới -

template <class T> 
TSquare<T>::TSquare (T size_, T x_, T y_, T scale_=0) 
{ 
    size = size_; 
    x = x_; 
    y = y_; 
    scale = scale_; 
} 

Trả lời

10

đối số mặc định là không nằm trong định nghĩa, chỉ tuyên bố:

template <class T> 
class TSquare 
{ 
public: 
    TSquare (T size_, T x_, T y_, T scale_ = 0); 
}; 

// out-of-line definition of a member of a class template: 
template <class T> 
TSquare<T>::TSquare (T size_, T x_, T y_, T scale_ /* = 0 */) 
{ 

} 

hay:

template <class T> 
class TSquare 
{ 
public: 
    // in-line definition of a member of a class template 
    TSquare (T size_, T x_, T y_, T scale_ = 0) 
    { 

    } 
}; 
+0

Hahahaha, bạn thật tuyệt vời! Cảm ơn! –

4

Theo tiêu chuẩn (N3797) §8.3.6/6 Đối số mặc định [dcl.fct.defa ult] (tôi nhấn mạnh):

Trừ hàm thành viên của lớp mẫu, các đối số mặc định trong định nghĩa hàm thành viên đó xuất hiện bên ngoài của định nghĩa lớp được bổ sung vào bộ đối số mặc định được cung cấp bởi thành viên khai báo hàm trong định nghĩa lớp. Đối số mặc định cho hàm thành viên của mẫu lớp phải được chỉ định trên khai báo ban đầu của hàm thành viên trong mẫu lớp.

Điều trên có nghĩa là các đối số mặc định cho các chức năng thành viên của lớp mẫu chỉ nằm trong định nghĩa của lớp. Như vậy, bạn sẽ đưa vào khai báo hàm thành viên đối số mặc định:

template<T> 
class TSquare { 
    ... 
    TSquare (T size_, T x_, T y_, T scale_ = 0); 
    ... 
}; 

Hoặc bạn phải đặt toàn bộ định nghĩa của hàm thành viên bên trong định nghĩa lớp.

template<T> 
class TSquare { 
    ... 
    TSquare (T size_, T x_, T y_, T scale_ = 0) { 
    ... 
    } 
    ... 
}; 
+0

Tôi đã tìm kiếm câu trả lời cho vấn đề này kể từ hai ngày trước! Cảm ơn! –

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