我一直在尝试制作一个基于短信的RPG游戏,并且如果你得到某个项目它会做某些事情。无论如何,我想要做的是从另一个类函数更改一个类变量。我该怎么做呢?我为你们编写了一些示例代码,看看我想要做什么。没有错误它只是不起作用。谢谢。
#include<iostream>
using namespace std;
// First class where we add values
class B
{
public:
void AddValueB(int VALUE);
int GetValueB(void);
B();
private:
int value;;
};
// constructor
B::B(void)
{
value=100;
}
// where we add the passed in value to our main value variable.
void B::AddValueB(int VALUE)
{
value+=VALUE;
}
// returns the final value
int B::GetValueB(void)
{
return value;
}
//**Second Class**
class A
{
public:
void SetValueA(int VALUE);
int GetValueA(void);
A();
private:
int value;;
};
// constructor
A::A(void)
{
}
// sets value
void A::SetValueA(int VALUE)
{
B b;
value=VALUE;
// if value is one we pass 25 in B's AddValue() function which then should add 25 to the value variable.
if(value==1)
{
cout << "Should Be 125?\n\n";
b.AddValueB(25);
}
}
// returns value
int A::GetValueA(void)
{
return value;
}
//main
int main()
{
A a;
B b;
// set A's value to 1 to trigger the if statement in the function which should add 25 to B's value variable.
a.SetValueA(1);
//output the final value for B.....still 100...why?
cout << b.GetValueB();
cin.get();
return 0;
}
答案 0 :(得分:1)
在void A::SetValueA(int VALUE)
中,您要在堆栈上创建B
并设置其值。它对B
中创建的main
没有影响。如果您想在B
中设置main
的值A::setValueA
,则必须将其传递给函数。
首先,更改类接口
class A
{
public:
void SetValueA(int VALUE, B& b);
int GetValueA(void);
A();
private:
int value;;
};
然后,改变实施。
void A::SetValueA(int VALUE, B& b)
{
value=VALUE;
if(value==1)
{
cout << "Should Be 125?\n\n";
b.AddValueB(25);
}
}
然后,将呼叫更改为A::SetValueA
中的main
。
int main()
{
A a;
B b;
a.SetValueA(1, b);
cout << b.GetValueB();
cin.get();
return 0;
}
答案 1 :(得分:1)
friend
functions可能很有用,但是如果你要改变其他类的值,那么它可能是不好的风格。
class A
{
private:
// private stuff
public:
//public stuff
friend class B
}
class B
{
private:
// private stuff
public:
//public stuff
friend class A
}
然后两个班级都可以直接访问彼此的成员。