我有一个类“A”,它从应用程序的GUI中获取变量的值。让我们说其中一个变量是“X”。然后,在另一个类“B”中,我想将其称为“X”并将其值传递给另一个函数。
我所做的是在类“B”中创建了一个名为“objectA”的类“A”的对象,然后调用“X”的值如下:
// class A:
void classA::function1(int gui_value){
x= gui_value;
}
然后在另一个班级:
//class B:
void classB::run(){
.
.
function2(/* I need to pass x here */);
.
.
}
函数和x都在头文件中正确定义。
我所做的是我在头文件中创建了classA的对象(让我们说:objectA),并使用“objectA”在“classB”中的“function2”中调用“x”的值,如下所示:
//class B:
void classB::run(){
.
.
function2(objectA->x);
.
.
}
让我们说“x”值等于“5”,当我在function2中调试“x”的值时,每次调试时它都会给我随机数。所以,我只是猜测这些随机值已经存在于内存中,这意味着“X”的值没有正确传递。
我认为,虽然创建了对象,但每次都会创建一个变量“x”的新实例。即:没有从classA中获取“x”的值,它只是创建一个包含其所有变量的classA对象。
我的问题是如何将classA中获得的“x”的值直接传递给classB而不创建其变量的新实例?
更新:
感谢 doctorlove的 回答,我的代码现在运行正常。我的问题是在创建“objectA”并为其赋值之后初始化它。我正在做的是创建对象并直接在“classB”中传递它。这就是为什么我得到随机值,因为它只是一个新的对象,在创建时在内存中具有任何价值。
答案 0 :(得分:1)
假设您有一个带有私有int变量i的A类,以及带有私有int变量X的B,
class A{
private:
int i;
// if you want to use x within A you have to declare the object here
B objectB;
.....
public :
int getI();
int setI();
};
// the second class B
class B(){
private :
int X;
......
public :
int getX();
void setX();
..
};
让我们说你有一个main()函数
int main (){
A objA;
B objB;
objB.setX(5);//X is now 5
objA.setI(objB.getx()); // i has the value of X which is 5
...
}
答案 1 :(得分:1)
目前尚不清楚你要做什么。如果你有这样的东西......
class A
{
private:
int X;//ignoring any thing about encapsulation for now
};
class B
{
//...
public:
void DoSomething()
{
A objectA;
//makes objectA another A each time we get here, with X uninitialised
//use objectA.X which has random numbers in
}
};
这将与您描述的问题类似。如果您将objectA
改为成员并正确初始化,则可能会执行您想要的操作。使用class A
和之前一样,
class B
{
//...
private:
A objectA;
public:
B()
{
objectA.X = 42;
}
void DoSomething()
{
//use member objectA.X
}
};
修改强> 显然,在我的例子中,我已经无处可撤出了42个。如果你有一个合理的值来自gui,请将其发送给B的构造函数。如果它发生了变化,你需要引用它。
explicit B(int gui_value)
{
objectA.X = gui_value;
}
<强> EDIT2 强>
如果其他地方有objectA
,则将 传递给构造函数
explicit B(const A & otherA)
: objectA(otherA)
{
}
如果不可能,那么您的设计需要改进。没有任何代码可以看,我再也无法帮助了。
答案 2 :(得分:0)
由于创建objectA
时没有编译时错误,因此成功创建了对象。
要传递变量,而不是使用箭头操作符,请使用点(。)运算符
y = objectA.X