2017-07-30 54 views
0

使用它这是我的代码的简化版本:如何在一个方法创建一个对象,而在另一个

#include <iostream> 

using namespace std; 

class ClassA { 
    public: 
     void method1A(){ 
      cout << "Hello World." << endl; 
      } 
     void method2A(){ 
      cout << "Bye." << endl; 
      }  
}; 

class ClassB { 
    public: 
     void method1B(){ 
      ClassA objectA; 
      objectA.method1A(); 
      } 
     void method2B(){ 
      objectA.method2A(); 
      } 
}; 

int main() { 
    ClassB objectB; 
    objectB.method1B(); 
    objectB.method2B(); 
    return 0; 
} 

的错误是:“对象A”在此范围内未声明,我想这是因为方法“method2B”不能访问对象“objectA”-yep,我正在学习C++ ^^ - 。如何在不移动“method1B”中的“objectA”对象声明的情况下工作?

+0

如果有任何答案有帮助,请将其标记为正确,以便人们知道在未来有相同问题时什么对您有效。 – Engineero

回答

2

(就像你在method1B做)你需要声明的成员对象您的方法之外:

class ClassB { 
    public: 
     ClassA objectA; 
     void method1B(){ 
      objectA.method1A(); 
      } 
     void method2B(){ 
      objectA.method2A(); 
      } 
}; 

这样它就可以通过课堂中的所有内容进行访问。如果你不希望它可以访问外部类,使它私人或代替保护:

class ClassB { 
    public: 
     // Your public declarations 
    private: 
     ClassA objectA; 
}; 
+1

谢谢你的回答。我知道这个选项,当然它有效,但我需要在这个方法中声明对象。正如我所说,这是实际代码的简化版本,并且在此代码中不能这样做,除非更改很多代码......也许更改为“ClassA * objectA = new ClassA;”并使用动态内存? –

+1

@AngelBravoSaenz您总是可以在'method1B()'中为成员变量赋予一个新值,以便'method2B()'使用'method1B()'中创建的值。 – Galik

2

你有两个选择:

  1. objectA作为ClassB
  2. 成员创建另一个ClassAmethod2B
1

你可以动态地在堆中分配空间用于新ClassA,然后返回一个指向该内存的开始:

#include <iostream> 

using namespace std; 

class ClassA { 
public: 
    void method1A(){ 
     cout << "Hello World." << endl; 
    }; 
    void method2A(){ 
     cout << "Bye." << endl; 
    };  
}; 

class ClassB { 
public: 
    ClassA * method1B(){ 
     ClassA * ObjectA = new ClassA; 
     ObjectA->method1A(); 
     return ObjectA; 
    }; 
    void method2B(ClassA * objectA){ 
     objectA->method2A(); 
    }; 
}; 

int main() { 
    ClassB objectB; 
    ClassA * objectA = objectB.method1B(); 
    objectB.method2B(objectA); 
    delete objectA; 
    return 0; 
}; 

我希望这有助于。

相关问题