C++ 使用另一类的变量

C++ 使用另一类的变量,c++,class,vector,nested,coordinates,C++,Class,Vector,Nested,Coordinates,我想在课堂上耍些花招 示例: object.position.x 我希望能够在velocity和其他方面重用Vector3类,这就是为什么我希望将它保留为一个类。 我试过那样做 #include"Vector3.h" class object{ public: Vector3 position; Vector3 velocity; } ------------------------------------- class Vector3{ flo


我想在课堂上耍些花招

示例:

object.position.x
我希望能够在velocity和其他方面重用Vector3类,这就是为什么我希望将它保留为一个类。 我试过那样做

#include"Vector3.h"

class object{
   public:
       Vector3 position;
       Vector3 velocity;
}

-------------------------------------

class Vector3{
    float x;
    float y;
    float z;
}
但它似乎没有我想象的那么好

当我转到
go.position.x=0时,代码块希望我使用
->

request for member 'x' in 'go.GameObject::position', which is of pointer type 'Vector3*' (maybe you meant to use '->' ?)|
但是当我这样使用它们时:
go.position->x=0
,程序崩溃了。
有人能告诉我这样做的“正确”或更好的方法是什么吗?

由于类的成员在默认情况下是私有的,您不能像position.x那样访问它们。您需要为它们编写getter和setter,否则使其类似于struct

structVector3{
    float x;
    float y;
    float z;
};

您粘贴的代码不完整,您得到的错误似乎来自不同版本的代码。下面是使用带指针和不带指针的类的示例

#include <iostream>
using namespace std;

class Vector3{
    public:
        float x;
        float y;
        float z;
};

class Object {
   public:
       Vector3 position;
       Vector3 velocity;
};

class ObjectPointer {
   public:
       Vector3 *positionPtr;
       Vector3 *velocityPtr;

       ObjectPointer()
         : positionPtr(new Vector3()),
         velocityPtr(new Vector3())
       {
       }
};

int main() {
    // your code goes here
    Object obj;
    obj.position.x = 1;
    obj.position.y = 2;
    obj.position.z = 3;
    obj.velocity.x = 11;
    obj.velocity.y = 12;
    obj.velocity.z = 13;

    std::cout << "Object Position (" << obj.position.x
        << ", " << obj.position.y
        << ", " << obj.position.z << ")" << std::endl;
    std::cout << "Object Velocity  (" << obj.velocity.x
        << ", " << obj.velocity.y
        << ", " << obj.velocity.z << ")" << std::endl;

    ObjectPointer *objPtr = new ObjectPointer();
    objPtr->positionPtr->x = 5;
    objPtr->positionPtr->y = 6;
    objPtr->positionPtr->z = 7;
    objPtr->velocityPtr->x = 15;
    objPtr->velocityPtr->y = 16;
    objPtr->velocityPtr->z = 17;

    std::cout << "ObjectPointer Position (" << objPtr->positionPtr->x
        << ", " << objPtr->positionPtr->y
        << ", " << objPtr->positionPtr->z << ")" << std::endl;
    std::cout << "ObjectPointer Velocity  (" << objPtr->velocityPtr->x
        << ", " << objPtr->velocityPtr->y
        << ", " << objPtr->velocityPtr->z << ")" << std::endl;

    return 0;
}
#包括
使用名称空间std;
类向量3{
公众:
浮动x;
浮动y;
浮动z;
};
类对象{
公众:
矢量3位置;
矢量3速度;
};
类对象指针{
公众:
矢量3*位置PTR;
矢量3*velocityPtr;
ObjectPointer()
:位置PTR(新矢量3()),
velocityPtr(新矢量3())
{
}
};
int main(){
//你的密码在这里
对象对象对象;
目标位置x=1;
对象位置y=2;
目标位置z=3;
目标速度x=11;
目标速度y=12;
目标速度z=13;

std::cout请提供真实代码,这是最好的。编译器消息说
position
Vector3*
,而在您的代码中是
Vector3
。好的,我在答案中粘贴了真实代码。很抱歉,我没有提供真实代码。我试图只获取相关部分。谢谢!我的代码似乎有点混淆了le Tour试图修复错误。在我的代码中是Vector3*位置;Vector3*速度。我不需要*运算符。但是你能告诉我我需要指针做什么吗?我的意思是,它看起来更复杂。你不需要在对象中使用Vector3的指针。我给你的示例仅供参考。指针是在多态性等特殊情况下更有用。您应该使用智能指针,如std::shared_ptr或std::auto_ptr来保存引用,std::make_shared来创建引用,而不是使用“new”运算符。