【问题标题】:Visual Studio 2015 "non-standard syntax; use '&' to create a pointer to member"Visual Studio 2015“非标准语法;使用 '&' 创建指向成员的指针”
【发布时间】:2015-11-10 19:30:31
【问题描述】:

我正在尝试用 C++ 实现我自己的链接列表,但我终其一生都无法弄清楚为什么会出现此错误。我知道有一个 STL 实现,但出于我尝试自己的原因。代码如下:

#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;
}

在指定的行上,我收到错误“非标准语法;使用 '&' 创建指向成员的指针”。这到底是什么意思?

【问题讨论】:

    标签: c++ templates linked-list visual-studio-2015


    【解决方案1】:

    您试图返回成员函数value,而不是成员变量data。改变

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

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

    【讨论】:

    • @LawrenceAiello 祝你好运。 :)
    【解决方案2】:

    这里的问题是模板的混淆组合、运算符的多种含义和一个错字。

    您有一个返回const T&amp; 的方法,其中T 是一个模板参数。您打算返回对T 类型对象的常量引用。但是由于拼写错误,编译器认为您正在尝试将其与方法 (value) 匹配,而不是 T (data) 类型的对象。编译器认为您正在尝试使用 &amp; 作为指向成员的运算符,而不是引用对象的运算符。但它足够聪明,有些地方不太对劲,因此会发出警告。

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 2020-03-30
      相关资源
      最近更新 更多