class herp
{
private:
string derp;
public:
void mderp(herp x, string y) {x.derp = y;}
}
herp object_0;
string temp = "asdf";
object_0.mderp(object0, temp);
答案 0 :(得分:2)
您正在将herp x
作为值类型传递。在这种情况下,x
是您传入的内容的副本。如果您想直接访问x.derp
,则应将x
作为参考传递:
void mderp(herp& x, string y) {x.derp = y;}
这应该允许修改x.derp
。
答案 1 :(得分:1)
参数herp
to按值传递,这意味着它是原始object_0
的副本。 mderp
函数修改副本,但该副本立即被丢弃。试试参考。我可能会这样做:
class herp
{
private:
string derp;
public:
static void mderp(herp &x, string y) {x.derp = y;}
}
herp object_0;
string temp = "asdf";
object_0.mderp(object0, temp);
这里重要的是改变herp x -> herp& x
,这意味着参数是"对herp的引用"而不是实际的herp值。
在这种情况下,我也将方法设为静态,因为它可以但不是必需的。
答案 2 :(得分:1)
替换
x.derp = y;
与
this->derp = y;
答案 3 :(得分:0)
我从您的问题中得到的是,您想要初始化您班级的私有变量。但这里有一些错误。你应该阅读更多关于课程的内容。
一种方式:
class herp
{
private:
string derp;
public:
void mderp(string y) {derp = y;}
};
herp object_0;
string temp = "asdf";
object_0.mderp(temp);
答案 4 :(得分:0)
你应该知道两件事。
首先,您的对象的成员变量不会因为您编写代码的方式而更改,您的函数mdepr
会创建对象herp
的副本。然后它会更改其成员变量并在离开函数时销毁该对象。因此,如果你想保持你的功能,你应该使用引用或指针。例如:
void mderp(herp& x, string y) {x.derp = y;}
void mderp(herp* x, string y) {x->derp = y;}
第二件事是,根据你对函数的使用示例,你可能不需要这样的函数。成员函数用于对象并允许对其进行修改(除非它们是const函数)。所以你可以写下以下内容:
class herp
{
private:
string derp;
public:
void mderp(string y) {derp = y;}
}
herp object_0;
string temp = "asdf";
object_0.mderp(temp);
希望这会有所帮助:)