Tôi đã có một số mã mà tôi cần phải chuyển tiếp khai báo một lớp mẫu (hoặc ít nhất, chuyển tiếp khai báo sẽ làm cho mọi thứ dễ dàng hơn nhiều cho tôi. ..). Tôi đã viết một phiên bản đơn giản của vấn đề tôi đang gặp vì vậy tôi có thể hiển thị nó ở đây:"Implicit instantiation của mẫu chưa xác định" khi forward tuyên bố lớp mẫu
template<bool>
class MyTemplateClass;
int main(int argc, char* argv[])
{
MyTemplateClass<false> myTemp; // error here
myTemp.GetTheValue();
return 0;
}
template<bool bShouldMult>
class MyTemplateClass
{
int m_myint;
float m_myfloat;
public:
MyTemplateClass() : m_myint(5), m_myfloat(3.0f) {}
float GetTheValue()
{
return m_myint * (bShouldMult ? m_myfloat : 1.0f);
}
};
Các lỗi tôi nhận được tại dòng nhận xét là:
Error - implicit instantiation of undefined template 'MyTemplateClass<false>'
gì chi tiết khác tôi có cần đưa vào khai báo trước MyTemplateClass không? Vì lỗi không đến từ dòng kế tiếp nên tôi giả định rằng không phải do thực tế là phương thức này không xác định. Trình biên dịch tôi đang sử dụng là LLVM/CLang, và tôi đang biên dịch trên Mac.