gpt4 book ai didi

c++ - 为什么我不能将指针转换为类结构

转载 作者:行者123 更新时间:2023-11-28 01:20:52 25 4
gpt4 key购买 nike

我有一个Geometry

class Geometry
{
public:
std::string stdstrType;
bool bValid;
public:
Geometry()

Geometry( std::string strType , bool bValue )

Geometry(const Geometry &g)

~Geometry()
virtual void draw();
bool isValid();
void setValidState(bool bState);
virtual void Init();
std::string GetName();
};

Geometry 对象的基类,如本例中的 Sphere

class Sph : public Geometry
{
public:
Sph( float radius , float segments );
~Sph();
void init();
void CleanUp();
void draw();

private:
float fRadius, fSegments;
bool isInited;
unsigned int m_VAO, m_VBO;
int iNumsToDraw;
SumShader shader;
bool isChanged;
};

我有一个包含不同 Container 对象的 Tree 结构,GeometryContainer 对象中的一种数据类型。

class Container
{
private:
std::string stdstrContainerName;
std::string stdstrPluginType;
Geometry Geom;
}

由于树中的每个项目都可以容纳一个圆形球体或矩形,所以我想使用几何图形的绘制函数来绘制 Geometry 对象类型。为此,当我尝试将任何 Geometry 对象类型转换为 Geometry 时,出现错误。

Sph sphere(0.1 , 32);
Geometry *geom = &sphere;
Container cont("Sphere" , "SPHERE" , *geometry );
myModel->SetContainer(child, cont);

容器的构造函数

 Container::Container( std::string strName, std::string strType, const 
Geometry& geometry) : Geom(geometry)
{
stdstrContainerName = strName;
stdstrPluginType = strType;
}

void TreeModel::SetContainer(const QModelIndex &index, Container Cont)
{
TreeItem *item = getItem(index);
item->setContainer(Cont);
}


class TreeItem
{
public:
// Functions here
private:
QList<TreeItem*> childItems;
Container itemData;
TreeItem* parentItem;
};

1) 这是正确的方法吗?

2) 如何将 Geometry 对象转换为 Geometry 指针?

最佳答案

Sph sphere();

您已经声明了一个返回 Sphere 对象且不带参数的函数。

要向 Sph 声明一个对象,您只需简单地编写

Sph 球体;Sph 球体{};

我猜你尝试了第一个但它没有编译,所以你只是更改了签名“until compiled”。您已经声明了一个自定义构造函数,这意味着编译器不再为您提供一个默认构造函数,因此您不能在不调用正确的构造函数(并且在您的以防它没有意义)。

除了

Geometry *geom = new Geometry;
geom = &sphere;

你正在创建一个新的指针几何体,而不是立即泄漏它并重新分配给一个完全没有意义的球体几何体。

此外,您的所有方法在 Geometry 中都是公开的,这没有任何意义(为什么要将 bool valid public 然后是 getter?)。

此外,类 Container 持有一个基类的实例,这会因对象切片而给您带来问题,您需要使用指针或引用。

为了回答你的问题,你应该实例化一个球体

Geometr* geom = new Sphere(1, 5); // random numbers

但我能说的最真实和最诚实的事情是从头开始重写所有内容,然后再尝试使用更简单的示例进行更多研究。

关于c++ - 为什么我不能将指针转换为类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56354340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com