gpt4 book ai didi

c++ - 模板参数是否需要前向声明或类型定义是否已知

转载 作者:行者123 更新时间:2023-11-30 00:39:03 25 4
gpt4 key购买 nike

基本上我有这段代码,但是 GCC 提示 vector 不能用空类型构造。有没有人遇到过这个问题前?我应该提到 Vertex3D 只能通过指针使用文件,因此没有理由将整个类型被编译器知道。我不知道模板在这方面的表现如何尊重..

//#include "cgVertex3D.hpp"                                                                                                                                                                                              
#include "cgDirection3D.hpp"

#include "cgHandedness.hpp"

class Vertex3D; // Forward declaration to avoid mutual header include

class Polygon3D {
// Vertices constituting this polygon
vector<Vertex3D*> *vertices = NULL;

public:
...

最佳答案

所有标准容器都要求类型完整。由于您正在创建指针 vector ,所以这不是问题(从不完整类型派生的指针类型可以用作那里的类型参数)。您的代码中的错误是 = NULL;部分(好吧,除非 std::vector 本身不可用,否则您还必须包括 <vector> ),无论如何这没什么意义。您在构造函数中初始化数据成员,而不是在类定义体中。而且您绝对不需要指向 vector 的指针。

// note that you probably *shouldn't* use pointers here, but whatever
class Polygon3D {
std::vector<Vertex3D*> vertices;
Polygon3D();
// ...
};

// ...

Polygon3D::Polygon3D() : vertices() {}

关于c++ - 模板参数是否需要前向声明或类型定义是否已知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401037/

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