C ++在变量之前声明函数

时间:2014-06-12 02:50:48

标签: c++ struct

所以我正在创建一个名为Person的结构,其中包含一些getter函数,它返回在getter函数中使用后声明的变量。当我在一个单独的结构中执行此操作时,没有错误,但现在使用此代码:

struct Person
{
    std::string name() const { return name; }
    std::string address() const { return address; }

    std::string name;
    std::string address;
};

我收到此错误:

IntelliSense: no suitable constructor exists to convert from "std::string () const" to "std::basic_string<char, std::char_traits<char>, std::allocator<char>>"

在另一个结构中我有这个...

struct Sales_data
{
    std::string isbn() const { return book_number; }

    std::string book_number;
};

我没有任何错误。我哪里出错了,以后如何避免这个问题呢?

3 个答案:

答案 0 :(得分:5)

问题是您在第一个示例中使用了与成员方法和成员变量相同的名称,但在第二个示例中使用了不同的名称。

答案 1 :(得分:4)

问题是在函数name()的范围内,标识符name指的是函数本身。因此,该函数试图返回自身,并且它无法转换返回字符串的const成员函数,并且不会将任何参数(即std::string () const)转换为std::string

答案 2 :(得分:1)

班上有两个name个。在name函数内部,函数阴影name变量。

让它们与众不同,一切都会好的。

E.g。将变量更改为m_name,或将函数更改为getName