如何从其他类访问不同类中的变量?
我们只是说我们有两个类,A
和B
。
这是对他们俩的代码如何从其他类访问不同类中的变量?
class A
{
public:
int x;
};
class B
{
public:
int y;
void FindY() { y = x + 12; }
};
void something()
{
A fs;
B fd;
fs.x = 10;
fd.FindY();
}
的问题是,我想访问X,但我不想通过什么作为参数传递给我的功能我看着朋友和继承,但似乎都没有帮助我,纠正我,如果我错了。
一些如何我需要找到函数FindY()
中的x。
我正在与静态方法,但在我的情况下,我得到这个错误。
错误2错误LNK2001:无法解析的外部符号“公用:静态类std::vector<class GUIDialog *,class std::allocator<class GUIDialog *> > Window::SubMenu" ([email protected]@@[email protected]@@[email protected]@@@[email protected]@@[email protected]@A) C:\Users\Owner\documents\visual studio 2010\Projects\Monopoly\Monopoly\Window.obj
这是我如何宣称它
static vector<GUIDialog *> SubMenu;
我得到的,因为
SubMenu.resize(3);
三种不同的方法的这一行的错误:
-
Make B :: FindY tak为E的甲对象作为参数
class B { public: void FindY(const A &a) { y = a.x + 12; } };
-
做出:: X静态
class A { public: static int x; }; class B { public: void FindY() { y = A::x + 12; } };
-
制作乙从A继承
class B : public A { public: void FindY() { y = x + 12; } };
CashCow还指出更在他的回答中做到这一点。
就这样,x
不是A
类的变量,而是类A
的对象变量(“实例”)。至少有两种方法可以使x
访问从B::findY
不经过任何的功能:
- 实例化
B::findY
函数内部A
类的一个对象:
class B { public: int y; void FindY() { A a; y = a.x + 12; } };
- 让
x
一静态变量,所以它是类本身的一个变量。你并不需要实例在这种情况下的对象,但是变量将共同为A
类型的所有对象(所以你不能对不同对象的x
不同的值):
class A { public: static int x; }; class B { public: int y; void FindY() { y = A::x + 12; } };
假设一个是正确的,你不能改变它,即x是一个成员变量,你需要一个A的实例才能使用它的x成员。
因此,我们可以修改B,但是您需要FindY()来不带参数。
因此,我们需要在A带来与之前的通话并将其存储为一个类的成员。
class B
{
public:
A a;
int y;
void FindY() { y = a.x + 12; }
};
这只是一个提纲。对于函数为operator()的“函子”类来说,这是常用的方法,并且需要固定数量的期望参数,但我们需要更多。整个boost :: bind基于这个原理。
`x`不无A`的`一个实例存在。你需要从* somewhere *中得到它。 – GManNickG 2010-12-22 09:35:57
您需要创建类“A”的对象,然后使用“A.x”。你在问那个笏还是我错过了什么? – Naveen 2010-12-22 09:36:01