模板子类范围解析

时间:2016-01-02 12:21:54

标签: c++ templates

我有一个非常简单的模板类。

#pragma once
#include <iostream>

template <class T>
class Test
{
protected:
    class Node
    {
    public:
        Node(Node& node) {}
    protected:
        virtual Node* copyNode(Node&);
    private:
    };
};

template <class T>
Test<T>::Node* Test<T>::copyNode(Test<T>::Node& node)
{
    return new Test<T>::Node(node);
}

我在主程序中使用它如下。

#include "Test.h"
using namespace std;

int main()
{
    Test<int> tree;
    getchar();
}

我收到语法错误C2061:“identifier'Node'”。

声明和实现都在同一个头文件中(链接器存在模板类问题)。我正在使用Visual Studio 2015。

在没有内联编写的情况下实现copyNode方法的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

缺少

typename

template <class T>
typename Test<T>::Node* Test<T>::Node::copyNode(typename Test<T>::Node& node)
{
    return new Test<T>::Node(node);
}