Tôi đang cố gắng truy cập chức năng thành viên tĩnh được xác định bên trong mẫu lớp. Trong tập tin tiêu đề TemplateTest.h tôi xác định Mẫu lớp tiểu học như:chức năng thành viên tĩnh bên trong chuyên môn mẫu lớp
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
Sau đó Nguồn tập tin TemplateTester.cpp tôi đặt một chuyên môn:
#include "TemplateTest.h"
template<>
struct TemplateTest<int, bool>
{
static void invoke()
{
std::cout << "invoke<int, bool>" << std::endl;
}
};
template struct TemplateTest<int, bool>; //instantiate to resolve linker issue
tôi một cách rõ ràng khởi tạo các lớp học với giải quyết nên mối liên kết đúng.
Trong driver.cpp tài xế:
include "TemplateTest.h"
int main()
{
TemplateTest<int, bool>::invoke();
return 0;
}
Khi tôi biên dịch TemplateTest.cpp với g ++ nó tạo ra các tập tin đối tượng một cách chính xác nhưng khi tôi cố gắng liên kết nó với các lớp lái xe nó mang lại cho lỗi mối liên kết của tôi " undefined reference to `TemplateTest :: invoke()"
Tôi đã đi qua các bài đăng liên quan khác như this one nhưng tôi không cố gắng truy cập một mẫu chức năng.
Mọi đầu mối đều được đánh giá cao.
Di chuyển triển khai sang tệp tiêu đề. triển khai khuôn mẫu cần phải được hiển thị cho tất cả TU sử dụng chúng. –