我有一个结构,其中有两个具有值的字段。我想实现一种更改字段值的方法。我使用以下代码完成了此操作,但这是不正确的。我想问一下我该如何解决?
if (this.obj[i] == null) { this.obj[i] = {};}
this.obj[i].test = "Whoever";
答案 0 :(得分:1)
一个结构像一个类一样工作,唯一的区别是,默认情况下,该结构中的所有内容都是公共的。
因此您可以(在这种情况下,您必须)在struct中声明setName
答案 1 :(得分:0)
类似的东西:
void SetName(CPerson& p, const char* szName) {
p.name = szName;
}
请注意,szName
参数可能指向其生存期可能在CPerson::name
的生存期结束之前的数组。这使CPerson::name
成为无效的指针。
答案 2 :(得分:0)
您需要使其成为成员函数
#include <iostream>
using namespace std;
struct CPerson {
const char* name = "Ivan";
const char* gender = "Male";
void SetName(const char* szName) {
//what to write here?
name = szname;
}
};
该代码仍然是错误的,因为它只是在玩弄指针。您应该使用std :: string来存储字符串。但是至少代码可以编译;
答案 3 :(得分:0)
我想实现一种更改字段值的方法。
我不确定您应该这样做。
您会看到,默认情况下,结构的字段是可公开访问的-这意味着任何人都可以更改方法(无方法)或更改方法。为什么要麻烦写这样的方法?不是多余的吗?
如果您使用的是 class 而不是结构,或者您已将字段访问权限设置为protected
或private
,那么有意义的是设置字段值,例如:
#include <string>
#include <string_view>
struct Person {
protected:
std::string name = "Ivan";
std::string gender = "Male";
public:
void changeName(std::string_view new_name) {
name = new_name;
}
};
(string_view
是C ++ 17中的新功能;在此之前,您可以使用const std::string&
)。
但是即使那样,拥有它也不总是一个好主意。同样,在您的这种结构中,有一个默认的名称和性别,没有充分的理由。除了这两种方法,您还可以使结构不可变:
#include <string>
struct Person {
const std::string name;
const std::string gender;
};
对于许多应用程序来说,这是很有意义的(例如,如果您是从某个数据库中获得的,而不是跟踪一个人的一生中的姓名和性别)。