C++ 中的循环依赖关系问题

Circular dependency issue in c++

本文关键字:关系 问题 依赖 循环 C++      更新时间:2023-10-16

我今天在处理复杂库时遇到的一个简约循环依赖问题如下

class Something; 
class Test
{
public:
int i;
void process()
{
Something S;
S.doSomething();
}
};
class Something
{
public:
void doSomething()
{
Test t;
t.i = 10;
}
};
int main()
{
Test t;
t.process();
}

test.cxx:10:16:错误:聚合"Something S"的类型不完整,并且 无法定义 S的东西;

使这项工作所需的最小代码更改是什么? 重新排列TestSomething类只会交换错误。 我能想到的一个是在doSomething()中使用全局/静态函数来执行与Test t对象相关的操作。更好的方法是什么?

因为只有实现依赖于另一个类,所以很容易将它们移出类定义。

在单个源文件中,这只是在定义class Something后移动Test::process定义。

class Test
{
public:
int i;
void process();
};
class Something
{
public:
void doSomething()
{
Test t;
t.i = 10;
}
};
// a function defined inside its class definition is an inline member function
inline
void Test::process()
{
Something S;
S.doSomething();
}
int main()
{
Test t;
t.process();
}