gpt4 book ai didi

调用构造函数时出现 C++ 链接器错误(初学者 :-()

转载 作者:行者123 更新时间:2023-11-30 01:30:01 24 4
gpt4 key购买 nike

我在 20 年后回到了 C++,但是这门语言似乎已经有了很大的发展。我无法让它运行。我觉得自己像个学生。

这是一个 AVL 树练习。 avl 代码是刚刚下载的(不是我的)。

//AVL.H

        #include <iostream>  
template <class Comparable>
class AvlTree
{
public:
explicit AvlTree( const Comparable & notFound );
AvlTree( const AvlTree & rhs );
~AvlTree( );

// other functions ...

const AvlTree & operator=( const AvlTree & rhs );

private:
AvlNode<Comparable> *root;
const Comparable ITEM_NOT_FOUND;
....etc
};

AVL.CPP

#include "avl.h" // and other system includes
template <class Comparable>
AvlTree<Comparable>::AvlTree( const Comparable & notFound ) :
ITEM_NOT_FOUND( notFound ), root( NULL )
{
}

/**
* Copy constructor.
*/
template <class Comparable>
AvlTree<Comparable>::AvlTree( const AvlTree<Comparable> & rhs ) :
ITEM_NOT_FOUND( rhs.ITEM_NOT_FOUND ), root( NULL )
{
*this = rhs;
}

/**
* Destructor for the tree.
*/
template <class Comparable>
AvlTree<Comparable>::~AvlTree( )
{
makeEmpty( );
}

.... other functions like insert, remove, makeEmpty etc

调用程序(我的)

 #include <iostream> ...other includes
#include "avl.h"

class Student
{
int id;
string fname, lname, level;
public:
Student::Student(int idx, string fnamex, string lnamex, string levelx) {
id=idx;
...etc
}
Student::Student(const Student & rhs) {
id = rhs.id;
... etc
}
bool operator< (const Student & rhs ) const
{ return id < rhs.id; }
bool operator== (const Student & rhs ) const
{ return id == rhs.id; }
Student operator= ( const Student & rhs ) {
id = rhs.id;
...etc
}
};

int main()
{
Student notFound(-1,"","","");

AvlTree<Student> myTree(notFound);
system("PAUSE");
return 0;
}

当我在 Visual Studio 2008 中构建时,出现以下错误。

Error 1 error LNK2019: unresolved external symbol
"public: __thiscall AvlTree<class Student>::~AvlTree<class Student>(void)" (??1?$AvlTree@VStudent@@@@QAE@XZ) referenced in function _main main.obj AVLTree

Error 2 error LNK2019: unresolved external symbol
"public: __thiscall AvlTree<class Student>::AvlTree<class Student>(class Student const &)" (??0?$AvlTree@VStudent@@@@QAE@ABVStudent@@@Z) referenced in function _main main.obj AVLTree

Error 3 fatal error LNK1120: 2 unresolved externals .....

它看起来好像说析构函数和复制构造函数未定义。但我可以看到 ARE 在 AVL.CPP 中定义。

请帮忙。我正在失去自尊。

最佳答案

当您使用模板时,您几乎总是必须在头文件中声明和定义模板。您不能将函数模板或类模板成员函数的定义放入单独的 .cpp 文件中,因为编译器需要在您使用模板时提供可用的定义。

有关详细信息,请参阅 C++ FAQ Lite 文章,Why can't I separate the definition of my templates class from its declaration and put it inside a .cpp file?

关于调用构造函数时出现 C++ 链接器错误(初学者 :-(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5070066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com