文件ex1.hpp(模板类的定义):
#ifndef EX1_HPP
#define EX1_HPP
#include "ex2.hpp"
template <class T>
class Ex1{
public:
void Ex1method(){
Ex2 a; // using nontemplate class object
a.Ex2method();
}
};
#endif
文件ex2.hpp(非模板类的定义):
#ifndef EX2_HPP
#define EX2_HPP
#include "ex1.hpp"
class Ex2{
public:
void Ex2method();
};
#endif
文件ex2.cpp(非模板类方法的定义):
#include "ex2.hpp"
void Ex2::Ex2method()
{
Ex1<int> e; // using template class object
e.Ex1method();
}
编译错误:
ex1.hpp:10:9: error: ‘Ex2’ was not declared in this scope
ex1.hpp:10:13: error: expected ‘;’ before ‘a’
ex1.hpp:11:9: error: ‘a’ was not declared in this scope
非模板类和模板类之间的这种循环依赖关系如何解决?我不能为实现文件定义非模板类方法,因为这会导致链接器错误。如果我在文件ex1.hpp中放置Ex2类的前向声明,则错误是:
error: invalid use of incomplete type ‘struct Ex2’
error: forward declaration of ‘struct Ex2’
最佳答案
不要在ex1.hpp
中包含ex2.hpp
,在此没有必要。您的标头没有循环依赖关系。
在您的ex1.hpp
文件中包含两个标头(或仅包含.cpp
),并且一切都应该不错。
关于c++ - 模板类和非模板类的循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9240895/