如何在另一个类的方法中使用一个类的实例?

时间:2013-09-15 05:34:09

标签: c++ class object scope

我定义了两个类 A类 B类。他们是完全独立的。

现在我创建c作为class Bd的实例作为class A的实例。现在,我想定义将在functionOfA执行操作的c正文:

class A {
public:
    functionOfA();
}

class B {
    ...
}

A::functionOFA()
{
    c.functionOfB();
}

main()
{
    A d;
    B c;
    d.functionOfA();
}

但编译器给出了以下错误: c未在此范围内声明

5 个答案:

答案 0 :(得分:2)

A::functionOfA()定义需要知道c实例是什么,您可以传入B实例:

class B;

class A
{
public:
    functionOfA(const B& b) const;
};

A::functionOFA(const B& b) const
{
    b.functionOfB();
}

A a;
B b;
a.functionOfA(b); // pass in B instance

答案 1 :(得分:1)

在此代码中(您的main):

{
    A a;
    B b;
    a.functionOfA();
}

b是仅在此范围内可用的局部变量。 b表示一个对象,其自动存储持续时间一直存在,直到执行超出范围(在这种情况下:从main开始)。

当您调用方法functionOfA时,虽然对象b仍然“生命”,但functionOfA无法访问此对象〜>此方法需要引用此对象(或其副本)才能使用它:

class A {
public:
    void functionOfA(B& b) {
        /* b is now accessible here, this method can also change the object b */
    }

以这种方式打电话:

A a;
B b;
a.functionOfA(b);

我建议你也看看这些问题:
How to pass objects to functions in C++?
Is it better in C++ to pass by value or pass by constant reference?
Are there benefits of passing by pointer over passing by reference in C++?

一些好书也可能在这里非常有用:
The Definitive C++ Book Guide and List

答案 2 :(得分:0)

A::functionOFA()
{
    c.functionOfB();  //You cannot do this unless c is global
}

但在你的情况下,它在main

使用:

 B c;
void A::functionOfA()
{
    c.functionOfB();
}

OR

将B的Object作为参数传递functionOfA(const B& c)

答案 3 :(得分:0)

我不明白他们如何完全独立,如果另一个调用方法。但是你可以将c作为参数传递。

class B
{public:
    functionOfB();
}

class A
{public:
    functionOfA(B /*or B& or const B&, learn about references*/ c);
    .....;
}



A::functionOFA(B c)
{
    c.functionOfB();
}

B::functionOfB()
{
  .....
}

main()
{
    A d;
    B c;
    d.functionOfA(c);
}

答案 4 :(得分:0)

你得到这个错误的原因是A类的任何对象都无法访问c。要改变它,你可以做以下两件事之一:你可以给A一个B类型的数据库并使用它或传递在B类对象中起A的作用。

class A {
public:
    B objB;
    functionOfA();
}

class B {
    ...
}

A::functionOFA()
{
    objB.functionOfB();
}

main()
{
    A d;
    B c;
    d.objB = c;
    d.functionOfA();
}

或(保持独立)

class A {
public:
    functionOfA(B& objB);
}

class B {
    ...
}

A::functionOFA(B& objB)
{
    objB.functionOfB();
}

main()
{
    A d;
    B c;
    d.functionOfA(c);
}

检查依赖注入。我认为你可以在第一种使用该技术的场景中使B类型独立。