gpt4 book ai didi

c++ - 模板类与非模板类的循环依赖

转载 作者:太空宇宙 更新时间:2023-11-04 15:50:37 25 4
gpt4 key购买 nike

文件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.hp​​p(非模板类的定义):

#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’

最佳答案

不要在ex2.hp​​p中包含ex1.hpp,那里没有必要。您的 header 没有循环依赖性。

在您的 .cpp 文件中包含两个 header (或仅包含 ex1.hpp),一切都应该是好的。

关于c++ - 模板类与非模板类的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240895/

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