2015-08-18 18 views
7

Tôi đang cố gắng triển khai Danh sách liên kết của riêng mình trong C++ và không thể cho tôi biết lý do tại sao tôi gặp phải lỗi này. Tôi biết có một thực hiện STL nhưng vì lý do tôi đang cố gắng của riêng tôi. Đây là mã:Visual Studio 2015 "cú pháp không chuẩn; sử dụng '&' để tạo con trỏ tới thành viên"

#include <iostream> 

template <class T> 
class ListElement { 
public: 
    ListElement(const T &value) : next(NULL), data(value) {} 
    ~ListElement() {} 

    ListElement *getNext() { return next; } 
    const T& value() const { return value; } 
    void setNext(ListElement *elem) { next = elem; } 
    void setValue(const T& value) { data = value; } 

private: 
    ListElement* next; 
    T data; 
}; 

int main() 
{ 
    ListElement<int> *node = new ListElement<int>(5); 
    node->setValue(6); 
    std::cout << node->value(); // ERROR 
    return 0; 
} 

Trên dòng quy định, tôi nhận được lỗi "phi tiêu chuẩn cú pháp, sử dụng '&' để tạo ra một con trỏ tới thành viên". Cái quái gì thế này?

Trả lời

8

Bạn đang cố trả lại hàm thành viên value, không phải là biến thành viên data. Thay đổi

const T& value() const { return value; } 

để

const T& value() const { return data; } 
+8

Wow ..... giờ đi ngủ cho tôi –

+1

@LawrenceAiello Chúc may mắn. :) – songyuanyao

0

Vấn đề ở đây là sự kết hợp khó hiểu của mẫu, nhiều ý nghĩa của một nhà điều hành, và một lỗi đánh máy.

Bạn có phương thức trả về const T&, trong đó T là thông số mẫu. Bạn có ý định trả về một tham chiếu liên tục cho một đối tượng thuộc loại T. Nhưng do lỗi đánh máy, trình biên dịch cho rằng bạn đang cố gắng khớp với phương thức đó (value), thay vì đối tượng thuộc loại T (data). Trình biên dịch cho rằng bạn đang cố gắng sử dụng & làm toán tử trỏ tới thành viên chứ không phải toán tử tham chiếu đến đối tượng. Nhưng nó là đủ thông minh rằng một cái gì đó là không hoàn toàn đúng, và do đó đưa ra một cảnh báo.

Các vấn đề liên quan