Tôi gặp sự cố về lỗi thay thế và câu trả lời của một số câu hỏi tương tự không giúp tôi.mẫu ứng cử viên bị bỏ qua: lỗi thay thế (lỗi với clang nhưng không phải g ++)
Đây là mã:
template<int dim, int loop>
class Reference{
public:
//...
template<int r, int c> using matrix_t = int[r][c];
Reference(const matrix_t<dim, loop> &mat){}
};
template<int dim, int loop>
class Partition{
// ...
public:
// ...
template<int r, int c> using matrix = int[r][c];
template<int r, int c> void readPattern(const matrix<r,c> &pattern)
{
// ...
}
// ...
};
Và tôi gọi mẫu chức năng này như sau:
int main()
{
// ...
const int DENOISE_UR[3][4] = {/*...*/};
Partition<1,2> partition;
partition.readPattern(DENOISE_UR);
// ...
}
Sử dụng g ++, nó biên dịch.
Khi sử dụng kêu vang ++ (linux) để biên dịch (clang++ -std=c++11 xxx.cpp
), nó dẫn đến các lỗi biên dịch sau:
error: no matching function for call to 'readPattern'
note: candidate template ignored: substitution failure[ with r = 3, c = 4 ]
template<int r, int c> void readPattern(const matrix<r,c> &pattern)
Tại sao?
oO nếu bạn loại bỏ các định nghĩa của 'Reference', [nó biên dịch] (http: // melpon.org/wandbox/permlink/xx2K1gu0J4PFutiP) ... – Columbo
@Columbo Đó chính xác là vấn đề. Tôi cần sử dụng lớp 'Tham chiếu' trong lớp' Phân vùng' – Shindou
@Columbo Thay đổi mẫu bí danh đầu tiên thành 'long [r] [c]': http://melpon.org/wandbox/permlink/0DHbcs3C0dm9H3gX ò.Ó – dyp