未声明的标识符在同一作用域c++



使用C++ 20模块,我有以下代码片段:

export {
template<class T>
class Suite {
private:
std::vector<ConcreteBuilder<T>> things {};
};
template <class T>
class ConcreteBuilder : Builder<T> {
private:
// A collection of things of function pointers or functors
std::vector<std::function<void()>> things;
public:
// Virtual destructor
virtual ~TestBuilder() override {};
// Add a new thing to the collection of things
template<typename Function>
void add(Function&& fn) {  
tests.push_back(std::forward<Function>(fn)); 
}
// override the build() base method from Builder<T>
virtual T build() const override {
return this->things;
}
};
}

我得到这个Clang错误:

error: use of undeclared identifier 'ConcreteBuilder'
std::vector<ConcreteBuilder> things {};

为什么我不能访问同一模块中同一级别的类型?

编译器从上到下编译文件,而不是一次编译所有文件。它在到达class ConcreteBuilder的定义之前到达std::vector<ConcreteBuilder<T>>的定义。

因此,您需要将Suite的定义移动到ConcreteBuilder的定义之后,以便编译器在vector定义中使用它时知道它是什么。

最新更新