Ubuntu 上的 Netbeans;C++;定义的模板"undefined"
Netbeans on Ubuntu; C++; Defined template "undefined"
我正在Ubuntu 11.04上的Netbeans 7.1上开发C++。我想知道是否有人能告诉我为什么Stack fs(5);被视为对"Stack::Stack(int)"的未定义引用。为什么它不被看作是一个用float表示T的类?
#include <iostream>
using namespace std ;
template <class T>
class Stack
{
public:
Stack(int = 10) ;
~Stack() { delete [] stackPtr ; }
int method1(const T&);
int method2(T&) ;
int method3()const { return top == -1 ; }
int method4() const { return top == size - 1 ; }
private:
int attribute1 ;
int attribute2 ;
T* stackPtr ;
} ;
using namespace std;
int main()
{
// This line gives the error message "undefined reference to `Stack<float>::Stack(int)'"
Stack<float> fs(5);
return 0;
}
谢谢,彼得。
我在任何地方都看不到Stack<float>::Stack(int)
的实际代码。你已经声明了,但没有定义。因此,它实际上并不存在(尽管你说它存在;编译器通常只是相信你的话),而且链接器将无法找到它,如果它走得那么远的话。
您需要像定义~Stack()
一样定义函数,或者像定义任何其他成员函数一样在代码的其他地方使用它。
要使用类模板,必须定义它们,只有声明是不够的。编译器所做的是,当你找到类模板的真实用法时,比如Stack<int>
,它会在类模板定义中放入int来替换T,并为它生成一个类。当它看到Stack<double>
时,它会基于你的类模板生成另一个类型,这些生成的类型称为模板类。
顺便问一下,我该如何使用c++语法<"int">(忽略")int回复,它就消失了。
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 为什么即使在定义之后仍存在"Identifier is undefined error "?
- 错误说"camera is undefined",但我确实定义了它
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 将单独的头文件和类定义文件链接到主函数文件 - G++ 返回重载"undefined reference to"构造函数
- 在C++中定义包含TTF_Font变量的向量时"Undefined size"错误
- C++'Undefined reference to'错误,尽管包含路径中的头文件中存在函数定义
- 静态库链接 已定义符号的问题"Undefined symbols"
- 使用自定义析构函数时出现"Undefined reference"错误
- "Undefined Symbols"但定义和声明了函数,没有错别字
- 在为 QScriptEngine 重新定义"print()"函数时返回"Undefined Value"有什么意义?
- 为什么在定义变量和链接库时"undefined reference"?
- 为什么删除不完整的类型定义为"undefined behaviour"?
- 在类定义之外内联方法时"Undefined reference"
- Ubuntu 上的 Netbeans;C++;定义的模板"undefined"
- Linux gcc 4.3.4 上的链接错误:与"jpeg"库相关的"undefined reference"(例如,未定义对"jpeg_std_error(jpeg_error_mgr*)"的引用)
- 定义函数后主文件出错? "undefined reference to 'sequence::sequence()'"
- 使用Clang "undefined"消毒剂时未定义的符号
- G++ 为定义的函数抛出大量'undefined reference'
- 单独的 allocate() 定义会导致自定义分配器C++"undefined reference"链接错误