1

これは、ヘッダー プロテクトおよびその他の関数を除いた Graph.h の内容です。

template <class T> class Node{
public:
    T data;
    Node<T> *NextNode;
public:
    Node();
    Node(T a);
    T getValue();
    void setValue(T a);
    void chainNode(Node<T> a);
    void chainNode(Node<T> *a);
    Node<T> getNextNode();
    void unchainNode();
};
//related methods
template <class T> Node<T>::Node(){
    data = NULL;
    NextNode = NULL;
}    
template <class T> void Node<T>::chainNode(Node<T> a){
    NextNode = NULL;
    NextNode = &a;
}
template <class T> void Node<T>::chainNode(Node<T> *a){
    NextNode = NULL;
    NextNode = a;
}    

template <class T> class List{
public:
    Node<T> *Head;
    List(Node<T> a);
    void AddInFront(Node<T> a);
    void AddInFront(Node<T> *a);
    void Append(Node<T> a);
    bool Remove(Node<T> a);
    bool Remove(T a);
    bool Contains(T a);
    bool DeleteList();
};
//Only working method of List
template <class T> List<T>::List(Node<T> a){
Head = &a;
}
// Error occurs in this Function
template <class T> List<T>::AddInFront(Node<T> a){
    a.chainNode(Head);
    Head = NULL;
    Head = &a;
}        

そして、これが私のメインです

#include<iostream>
#include"Graph.h"
int main(){
    Node<int> a = Node<int>(20);
    List<int> d = List<int>(a);
    Node<int> b = Node<int>(20);
    d.AddInFront(b);
}

そして、ここに私のエラーがあります

error C4430: Missing type specifier - int assumed . Note: C++ does not support default-  int

私のコンパイラ (MSVS 11) は、AddInFront 関数の最後に C4430 エラーがあることを教えてくれます。つまり、最後の中かっこ以外の行にエラーがあることを意味します。このエラーを取り除こうとしますが、修正できないようです。

4

1 に答える 1

1

関数の定義で戻り値の型を指定するのを忘れましたAddInFront():

template <class T> void List<T>::AddInFront(Node<T> a) {
//                 ^^^^
//                 This was missing
    a.chainNode(Head);
    Head = nullptr;
    Head = &a;
}

また、コピーの初期化が下にあることに注意してください。

Node<int> a = Node<int>(20);
List<int> d = List<int>(a);
Node<int> b = Node<int>(20);

不要です。代わりに直接初期化を使用します。

Node<int> a(20);
List<int> d(a);
Node<int> b(20);
于 2013-05-18T18:03:09.043 に答える