2017-01-26 4 views
0
template <typename T> 
class Node { 
    private: 
    T data; 
    Node<T> * next; 
    public: 

    Node(T _data, Node<T> * _next): data(_data), next(_next){} 

    T get_data() const { 
     return this->data; 
    } 

    Node<T> * get_next() const { 
     return this->next; 
    } 

    void set_data(T data) { 
     this->data = data; 
    } 

    void set_next(Node<T> * next) { 
     this->next = next; 
    } 
}; 

にメンバ関数を呼び出します。私は、コンソールのプリントにこのerrerをコンパイルしようとするとC++ - 今私は逆参照オブジェクトポインタに「set_next()」関数を呼び出すようにしようと間接参照オブジェクトポインタ

Node<T> new_element(element, NULL); 
Node<T> * tmp = this->get_last(); // returns a pointer to the last element 
*tmp.set_next(&new_element); 

メッセージ:

error: request for member ‘set_next’ in ‘tmp’, which is of pointer 
type ‘Node<int>*’ (maybe you meant to use ‘->’ ?) 
*tmp.set_next(&new_element); 

コンパイラがなぜ ' - >'を使用するのかわかりません。パブリックメンバー関数を呼び出すための完璧な方法です

は、しかし、私が入れたとき:

error: void value not ignored as it ought to be 
*tmp->set_next(&new_element); 

私はそれが何を意味するのか理解していない、誰かが私を助けることができます。

Node<T> new_element(element, NULL); 
Node<T> * tmp = this->get_last(); 
*tmp->set_next(&new_element); 

が、私はこれを取得しますか?

答えて

2

*tmp.set_next(&new_element); 

はあなたが望むものを明確にされていない

*(tmp.set_next(&new_element)); 

と同じです。

あなたは

(*tmp).set_next(&new_element); 

または

tmp->set_next(&new_element); 
0
tmp->set_next(&new_element); 

が正しい使用法です。

*が戻り値の逆参照を試みるため、エラーメッセージが表示されます。これはvoidです。演算子の優先順位のために

+0

を使用することができます答えてくれてありがとう! – cmplx96

+0

オブジェクトへのポインタで関数を呼び出すときには、 - >を使いポインタを自動的に逆参照しますか? – cmplx96

+0

' - >'はポインタを逆参照し、メンバにアクセスします。 '()'はメソッドを呼び出します。 – mch

関連する問題