我在解决这个问题时遇到了一些困难。
主要思想是,我在类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();
}
答案 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. 我希望相机能够遵循这一点 模型,所以我将不得不访问该模型 相机类的职位
答案 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文件中定义,否则您将收到此错误。