我定义了两个类 A类和 B类。他们是完全独立的。
现在我创建c
作为class B
和d
的实例作为class A
的实例。现在,我想定义将在functionOfA
执行操作的c
正文:
class A {
public:
functionOfA();
}
class B {
...
}
A::functionOFA()
{
c.functionOfB();
}
main()
{
A d;
B c;
d.functionOfA();
}
但编译器给出了以下错误: c未在此范围内声明
答案 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类型独立。