调用模板类构造函数

时间:2015-07-12 00:07:16

标签: c++ templates c++11

我很难找到调用使用模板的类构造函数的解决方案。

- 标题文件

template <class Item>
class Binary_tree
{
    string file_name;
    list<Item> arr_data;
public:
    Binary_tree(string fname);
    void printArr();
};

- cpp文件

template <typename Item>
Binary_tree<Item>::Binary_tree(string fname)
{
    File_Name = fname;
    total = 0;
    root = nullptr;

    std::ifstream filestream(fname);
    string line;

    while (!filestream.eof())
    {
        filestream >> line;
        arr_data.push_back(line);
    }
}

template <typename Item>
void Binary_tree<Item>::printArr()
{
    int size = arr_data.size();

    for (int i = 0; i < size; i++)
    {
        cout << "arr_data [" << i << "] is: " << arr_data[i] << endl;
    }
} 

- main.cpp中

int main(int argc, char** argv)
{
 Binary_tree<string> test(file); 
 test.printArr();

 return 0;
}

现在我收到了LNK1120和LNK2019错误。

2 个答案:

答案 0 :(得分:3)

注意:这个答案回答了原始问题,该问题被完全不同的问题所取代!

声明适用于the Most Vexing Parse

中描述的功能
Binary_tree<string> test(Binary_tree<string>(file));

这声明了一个名为test()的函数,返回Binary_tree<string>并接受一个名为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)};

答案 1 :(得分:0)

您遇到了most vexing parse

Binary_tree<string> test(Binary_tree<string>(file));

这是一个函数声明,就像

一样
Binary_tree<string> test(Binary_tree<string> file);

...声明了一个名为test的函数,该函数接受Binary_tree<string>作为参数,并返回Binary_tree<string>