使用模板类时链接器错误?
I'm getting an "unresolved external symbol "public:__thiscall hijo<int>::hijo<int>(void)" referenced in function_main
我开始了一个新项目,因为我在另一个更大的项目上遇到了同样的错误。 当我尝试使用 new 关键字分配空间时发生错误。 如果这个错误很愚蠢,请原谅我,因为我在过去的几个月里没有编写任何程序。
/********************file hijo.h******************/
#pragma once
#ifndef hijo_h
#define hijo_h
template <class A>
class hijo
{
public:
hijo(void);
~hijo(void);
};
#endif
/********************file hijo.cpp***************/
#include "hijo.h"
#include <iostream>
using namespace std;
template <class A>
hijo<A>::hijo(void)
{
}
template <class A>
hijo<A>::~hijo(void)
{
}
/*********************at main() function ***************/
#include <iostream>
#include "hijo.h"
int main(){
hijo<int> *h = new hijo<int>; <---- PROBLEM AT THIS LINE
system("pause");
return 0;
}
I'm getting an "unresolved external symbol "public:__thiscall hijo<int>::hijo<int>(void)" referenced in function_main
I started a new project cause I was having this same error on another larger project.
The error occur when I try to allocate space using the new keyword.
If this error is silly please forgive me cause I haven't programmed anything in the last months.
/********************file hijo.h******************/
#pragma once
#ifndef hijo_h
#define hijo_h
template <class A>
class hijo
{
public:
hijo(void);
~hijo(void);
};
#endif
/********************file hijo.cpp***************/
#include "hijo.h"
#include <iostream>
using namespace std;
template <class A>
hijo<A>::hijo(void)
{
}
template <class A>
hijo<A>::~hijo(void)
{
}
/*********************at main() function ***************/
#include <iostream>
#include "hijo.h"
int main(){
hijo<int> *h = new hijo<int>; <---- PROBLEM AT THIS LINE
system("pause");
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于 C++ 编译模型的奇怪之处,您无法非常干净地分离出模板类的 .h 和 .cpp 文件。具体来说,任何想要使用模板类的翻译单元(C++ 源文件)都必须有权访问整个模板定义。这是该语言的一个奇怪的怪癖,但不幸的是它一直存在。
一种选择是将实现放在头文件中而不是源代码中,然后根本不存在 .cpp 文件。例如,您可能有这样的标题:
希望这有帮助!
Due to a weirdness in C++'s compilation model, you cannot separate out .h and .cpp files very cleanly for template classes. Specifically, any translation unit (C++ source file) that wants to use a template class has to have access to the entire template definition. This is a strange quirk of the language, but unfortunately it's here to stay.
One option is to put the implementation up in the header file rather than in the source, then to not have a .cpp file at all. For example, you might have this header:
Hope this helps!