在不同的C ++类上访问初始化变量

时间:2010-05-18 20:40:51

标签: c++ variables class

我在解决这个问题时遇到了一些困难。

主要思想是,我在类A中初始化了类B的变量,类A.h将变量Z声明为public,如B * Z;

在A.cpp类中,我将其初始化为Z = new B();

现在,我想从C类访问该变量,但我无法这样做。 C.h包括A.h和B.h

这里有一些代码:

Car.h

#include "Model.h"

class Car {
public:

    static Model *Z;

}

Car.cpp

#include "Car.h"

void Car::init() {
    Z = new Model();
}

Model.h

Class Model {}

Camera.h

#include "Model.h"
#include "Car.h"

class Camera {}

Camera.cpp

Camera::init() {
    Car::Z->getPos();
}

5 个答案:

答案 0 :(得分:2)

  

我初始化了一个类类型的变量   A级B

#pragma once
#include "B.h"

class A
{
   public:

   B* Z;
   A()
   { 
      Z = new B();
   }
}
  

B.h

#pragma once
class B
{ 
}
  

C.h

#pragma once
#include "A.h"

class C
{ 
   A a; //here you construct A
   C() 
   { 
      a.Z = new B(); //you can read/write Z
   }
}

这应该有效!请注意包含#pragma once或标题保护/包含保护(http://en.wikipedia.org/wiki/Header_file),这样标题就不会被包含两次(如果应该这样做的话)。

  

有3个班,汽车,模型和   相机。在车上我宣布一个新的模型Z.   我希望相机能够遵循这一点   模型,所以我将不得不访问该模型   相机类的职位

  • A = Car
  • B =模特
  • C =相机

答案 1 :(得分:1)

它是静态变量吗?如果不是,则必须从A类实例访问它。

从你所写的内容来看,它听起来像是静态的。在那种情况下,在A.h你必须说

static B *Z;

然后在A.cpp中,你必须定义它:

B *A::Z;

然后在C.cpp中,您可以像

一样访问它
A::Z->whatever();

答案 2 :(得分:1)

你在做这样的事吗?

class A{
public:
    A() : m_B( new B() );
    B* getB() const { return m_B;}
private:
    B *m_B;
};

class C{
public:
    B* getB() const { return m_A.getB(); }
private:
    A m_A;
};

答案 3 :(得分:1)

所以你有

class A {  
public:  
    B* Z;  
};  

class B {  
public:  
    // Empty  
};  

class C {  
public:  
    // Empty  
};

所以说......没有理由你应该能够访问Z.你的问题不足以说明......但你应该这样做

class C {
public: 
    A* z_access;
};

现在你可以使用A类在C类中使用“a”Z. 但我们需要更多信息才能看到真正发生的事情。

答案 4 :(得分:1)

根据更新的问题:

您的问题是您实际上没有在任何地方定义Car::Z变量。你在Car类中有一个声明,但在任何地方都没有定义。

您需要在car.cpp文件中添加以下行:

Model* Car::Z;

或者,可选地,如果您想要给Z一个初始值,例如:

Model* Car::Z = NULL;

对于除常量整数之外的任何静态成员变量,通常需要这样做。您需要class { }块中的声明,然后您需要在相应的.cpp文件中定义,否则您将收到此错误。