Tôi đang tạo một lớp Ma trận đơn giản. Tôi cố gắng để thêm một tham số mẫu giấu tên để đảm bảo nó được sử dụng với các loại không thể thiếuC++: Cách sử dụng các tham số mẫu chưa đặt tên trong các thành viên của lớp?
#include <string>
#include <vector>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_scalar.hpp>
template <typename T, typename = typename boost::enable_if<boost::is_scalar<T> >::type>
class Matrix
{
public:
Matrix(const size_t nrow, const size_t ncol);
private:
const size_t nrow_;
const size_t ncol_;
std::vector<std::string> rownames_;
std::vector<std::string> colnames_;
std::vector<T> data_;
};
Tôi muốn xác định các nhà xây dựng bên ngoài định nghĩa lớp
template <typename T,typename>
inline Matrix<T>::Matrix(size_t nrow, size_t ncol)
: nrow_(nrow),
ncol_(ncol),
rownames_(nrow_),
colnames_(ncol_),
data_(nrow_*ncol)
{};
g ++ trả về lỗi sau
Matrix.hh:25:50: error: invalid use of incomplete type ‘class Matrix<T>’
inline Matrix<T>::Matrix(size_t nrow, size_t ncol)
Bạn có biết cách giải quyết vấn đề này không?
Xin cảm ơn trước.
Bằng cách "xác định bên ngoài", ý của bạn là gì? Trong một tập tin cpp? – Garf365
Không, trong tiêu đề, ngay sau dấu phẩy kết thúc định nghĩa lớp. –