gpt4 book ai didi

C++类初始化

转载 作者:行者123 更新时间:2023-11-30 01:58:42 26 4
gpt4 key购买 nike

新手警告。我有以下类(class)

查看

class View {
public:
explicit View(const TupleSchema& schema)
: schema_(schema),
columns_(new Column[schema.attribute_count()]),
row_count_(0) {
}
View(const View& other)
: schema_(other.schema()),
columns_(new Column[other.schema().attribute_count()]),
row_count_(0) {

}
explicit View(const View& other, rowcount_t offset, rowcount_t row_count)
: schema_(other.schema()),
columns_(new Column[other.schema().attribute_count()]),
row_count_(0) {

}
View(const Column& column, rowcount_t row_count)
: schema_(TupleSchema::Singleton(column.attribute().name(),
column.attribute().type(),
column.attribute().nullability())),
columns_(new Column[1]),
row_count_(row_count) {

}

private:
const TupleSchema schema_;
scoped_array<Column> columns_;
rowcount_t row_count_;
};

阻止

class Block {
public:
Block(const TupleSchema& schema, BufferAllocator* allocator)
: allocator_(allocator),
columns_(new OwnedColumn[schema.attribute_count()]),
view_(schema) {

}
}
}
private:
BufferAllocator* const allocator_;
scoped_array<OwnedColumn> columns_;
View view_; // Full view on the entire block.
DISALLOW_COPY_AND_ASSIGN(Block);
};

查看复印机

class ViewCopier : public BaseViewCopier {
public:
ViewCopier(const TupleSchema& schema, bool deep_copy);
ViewCopier(const BoundSingleSourceProjector* projector, bool deep_copy);
};

当我在另一个类中使用上面的作为成员时,我为它编写了一个构造函数,如下所示

class SegmentedTable : public BasicOperation {
public:
SegmentedTable::SegmentedTable(const std::vector<TupleSchema> vp_schemas, BufferAllocator* buffer_allocator)
: BasicOperation(),
view_copier_(NULL, NULL) { }
private:
scoped_ptr<Block> block_;
View view_;
ViewCopier view_copier_;
}

我收到一条错误消息,指出未定义任何方法 View::View()。我知道这是因为没有类的 View() 构造函数是必需的,因为它会在 SegmentedTable 构造函数的初始化列表中自动初始化。但是我有两个问题

1) 为什么 Block 不需要同样的东西。

2) 为什么我可以使用 ViewCopier(NULL, NULL) 初始化 ViewCopier 而我不能为 View 这样做。做 View(NULL) 也告诉我没有定义方法 View::View(NULL) 。

我知道我没有提供示例中使用的其他一些类定义,但我希望没有它们也能回答这个问题。

最佳答案

这是因为当你写:

View view_;

它不像 java 那样创建空引用,它实际上尝试构造 View 。

所以你应该要么使用一个指针并稍后实例化它,要么构造它并传递所需的参数。

或者给View添加一个不接受任何参数的构造函数。

ViewCopier 也一样

关于C++类初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17047873/

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