2016-01-02 29 views
0

我有一個非常簡單的模板類。模板子類的作用域分辨率

#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

typename缺失:

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

另外'節點::'之前'copyNode'失蹤。 – LogicStuff

+1

'copyNode()'在'Node'的範圍內聲明。 –

+0

@LogicStuff:由第一個錯誤停止,錯過那個:/ fixed。 – Jarod42