1

我有一个类“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”中。这就是为什么我得到随机值的原因,因为它只是一个新对象,在创建时在内存中具有任何值。

4

3 回答 3

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;
}

EDIT2objectA如果您在其他地方 有现有的,则将其传递给构造函数

explicit B(const A & otherA)
    : objectA(otherA)
{
}

如果这不可能,您的设计需要改进。没有任何代码可以查看,我无法再提供帮助。

于 2013-08-01T10:43:35.530 回答
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 
...
}
于 2013-08-01T10:41:44.833 回答
0

由于在创建 时没有编译时错误objectA,因此对象已成功创建。

要传递变量,而不是使用箭头运算符使用点(。)运算符 y = objectA.X

于 2013-08-01T10:38:41.457 回答