C++ 调用模板类构造函数

C++ 调用模板类构造函数,c++,templates,c++11,C++,Templates,C++11,我很难想出调用使用模板的类的构造函数的解决方案 --头文件 template <class Item> class Binary_tree { string file_name; list<Item> arr_data; public: Binary_tree(string fname); void printArr(); }; 模板 类二叉树 { 字符串文件名; 列出arr_数据; 公众: 二叉树(字符串fname); void pri

我很难想出调用使用模板的类的构造函数的解决方案

--头文件

template <class Item>
class Binary_tree
{
    string file_name;
    list<Item> arr_data;
public:
    Binary_tree(string fname);
    void printArr();
};
模板
类二叉树
{
字符串文件名;
列出arr_数据;
公众:
二叉树(字符串fname);
void printArr();
};
--cpp文件

模板
二叉树::二叉树(字符串fname)
{
文件名=fname;
总数=0;
root=nullptr;
std::ifstream filestream(fname);
弦线;
而(!filestream.eof())
{
文件流>>行;
arr_数据。推回(行);
}
}
模板
void二叉树::printArr()
{
int size=arr_data.size();
对于(int i=0;i
二叉树测试(二叉树(文件));
这是一个函数声明,就像

Binary_tree<string> test(Binary_tree<string> file);
二叉树测试(二叉树文件);

…它声明了一个名为
test
的函数,它接受一个
二叉树作为参数,并返回一个
二叉树
注意:这个答案回答了原来的问题,这个问题被一个完全不同的qestion所取代

该声明适用于如下所述的函数:


请提供一个。什么是
文件
?因为
测试
很可能是作为函数声明而不是变量提取的。file是文件名,构造函数将使用该文件读取数据并将其添加到二叉树类中定义的列表中。“创建新问题”的哪一部分你不清楚吗?我想创建一个二叉树对象,我可以稍后使用它来调用它的方法。现在我无法调用printArr函数。我不断收到错误,如:表达式必须具有类类型。我尝试了所有这些,并不断收到以下4个LNK错误。LNK2019和LNK1120@Gaurav:当然可以。您需要定义函数模板and我猜你是在一个单独的.cpp文件中这样做的(你没有向我展示代码,我需要使用我的透视技术,这并不完全可靠)。如果你把函数模板的定义放在一个.cpp文件中,你需要显式地实例化它们(关于这个主题有很多问题和答案)当然可以。最简单的方法是将函数模板的定义放在标题中,让编译器隐式地实例化它们。我查看了您的页面,了解了这个概念,而且大部分时间我也在实现它,正如您所示。如果您想看我的代码,这里就是:“#include“BinaryTree.h”模板二叉树:二叉树(字符串fname){File_Name=fname;total=0;root=nullptr;std::ifstream filestream(fname);字符串行;while(!filestream.eof()){filestream>>line;arr_data.push_back(line);}}int main(){string File=“HeapQuestions.txt”;二叉树测试(File)//=(二叉树(文件));test.printArr();return 0;}'@Gaurav:所以你的模板定义在.cpp中,这可能不是你想要的!把代码放到
BinaryTree.h
中,它应该可以编译。我不知道它是否有效。我发现了
.eof()的用法
在您的代码中,这肯定是错误的!您需要在阅读后进行检查,例如,使用
while(filestream>>line){…}
(它不会读取一行,而只读取一个单词;如果您想读取一行,则使用
std::getline(filestream,line)
)。也不是说你不应该将代码粘贴到注释中!你应该更新你的问题…
#包括“BinaryTree.h”模板BinaryTree::BinaryTree(string fname){File\u Name=fname;total=0;root=nullptr;std::ifstream filestream(fname);string line;while(!filestream.eof()){filestream>>line;arr\u data.push\u back(行);}}int main(){string file=“HeapQuestions.txt”二进制树测试(文件);//=(二进制树(文件));test.printArr();返回0;}
int main(int argc, char** argv)
{
 Binary_tree<string> test(file); 
 test.printArr();

 return 0;
}
Binary_tree<string> test(Binary_tree<string>(file));
Binary_tree<string> test(Binary_tree<string> file);
Binary_tree<string> test(Binary_tree<string>(file));
Binary_tree<string> test0(file);
Binary_tree<string> test1 = Binary_tree<string>(file);
Binary_tree<string> test2{Binary_tree<string>(file)};