Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在cpp中动态更改属性的值_C++_C - Fatal编程技术网

C++ 在cpp中动态更改属性的值

C++ 在cpp中动态更改属性的值,c++,c,C++,C,我有一个结构: struct Person{ int scoreone; int scoretwo; int scoretotal; } main(){ Person a; a.scoreone=3; a.scoretwo=5; //and later a.scoreone=10; } 我希望scoretotal在不使用任何函数的情况下更改scoreone和scoretwo时更新。 感谢这是不能在C++中完成的。C++的处理方法是将记分符转换成方法 现在,不是

我有一个结构:

struct Person{
  int scoreone;
  int scoretwo;
  int scoretotal;
}
main(){
  Person a;
  a.scoreone=3;
  a.scoretwo=5;
  //and later 
  a.scoreone=10;
}
我希望scoretotal在不使用任何函数的情况下更改scoreone和scoretwo时更新。
感谢

这是不能在C++中完成的。C++的处理方法是将记分符转换成方法


现在,不是说person.scoretotal,而是说person.scoretotal,每次都会重新计算总分。

无论您使用何种语言,基本问题在于结构的设计。此结构中只有两个独立的数据值。但是你正在储存三个。这是个错误

您需要存储的只是两个主要值,scoreone和scoretwo。这些是数据。另一个值是由关系定义的派生值,其总和等于scoreone+scoretwo之和

<>你应该删除数据成员SCORITOTA,如果你在C中编码,或者在C++中编码,则用一个函数替换它。在C语言中,代码可能如下所示:

struct Person{
  int scoreone;
  int scoretwo;
};

int scoretotal(const struct Person person)
{
    return person.scoreone + person.scoretwo;
}

不能自动改变值,需要运行一些代码,C或C++代码总是在函数中。

其余的答案假定使用C++,并且根本不在C中工作。 但是,您可以保持这一事实,即它是一个函数,不让外部可见,我想这正是您关心的:

struct Person { 
    int scoreone;
    int scoretwo;

    class total  {
        int *a, *b;
    public:
        total(int *a, int *b) : a(a), b(b) {}
        operator int() { return *a + *b; }
    } scoretotal;

    Person() : scoretotal(&scoreone, &scoretwo) {}
};
这确实有一个通常很小的副作用。它依赖于从Person::total到int的隐式转换来完成其工作。这可能会在两种情况下导致意外结果。一种是,如果您试图在期望从int隐式转换为其他类型的情况下使用某个_person.scoretotal。您已经在使用从Person::total到int的隐式转换,并且编译器将只隐式使用一个用户定义的转换,这将失败。另一方面,如果要使用auto x=some_person.scoretotal;,x将是Person::total而不是int,因为auto将在不发生隐式转换的情况下推断实际类型

只要你做一些比较明显的事情,比如:

Person some_person;

some_person.scoreone = 1;
some_person.scoretwo = 2;

int total = some_person.scoretotal;

std::cout << "Total score: " << some_person.scoretotal;   

…您将获得scoretotal跟踪scoreone和scoretwo的总数,而无需明确说明必须调用函数来完成此操作。

如果您像john在回答中那样声明struct Person,则调用scoretotal函数时不应出现错误。请记住包含括号,表示person.scoretotal无效,您必须编写person.scoretotal,因为您在person结构中调用函数,而不是请求成员。

请提供更多代码?&你的问题是什么?请选择一种语言。这是C还是C++?我建议C++。至于你所用的语言不清楚,你的主要是不对的。对main使用正确的声明。如果您不喜欢函数,宏如何?我已经编辑了标题并添加了c++为什么我的编译器在打印时抱怨“struct Person”没有名为“scoretotal”的成员?
Person some_person;

some_person.scoreone = 1;
some_person.scoretwo = 2;

int total = some_person.scoretotal;

std::cout << "Total score: " << some_person.scoretotal;