所以我正在创建一个名为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;
};
我没有任何错误。我哪里出错了,以后如何避免这个问题呢?
答案 0 :(得分:5)
问题是您在第一个示例中使用了与成员方法和成员变量相同的名称,但在第二个示例中使用了不同的名称。
答案 1 :(得分:4)
问题是在函数name()
的范围内,标识符name
指的是函数本身。因此,该函数试图返回自身,并且它无法转换返回字符串的const成员函数,并且不会将任何参数(即std::string () const
)转换为std::string
。
答案 2 :(得分:1)
班上有两个name
个。在name
函数内部,函数阴影name
变量。
让它们与众不同,一切都会好的。
E.g。将变量更改为m_name
,或将函数更改为getName
。