两个文件使用彼此的功能-如何解决
Two files using each other funtions - how to solve it?
我有两个带有源文件的头,比如file1.h
、file1.cc
和file2.h
、file2.cc
。它们相互使用功能,例如:
file1.h:
void test1();
file2.h:
void test2();
file1.cc:
#include "file1.h"
#include "file2.h"
void test1() {
do_something();
test2();
}
file2.cc:
#include "file1.h"
#include "file2.h"
void test2() {
do_something_else();
test1();
}
我遇到了问题,依赖性是相互的,我们不能在不编译另一个文件的情况下编译一个文件。如何解决这个问题?
- 修改文件以删除双重递归
- 使用一些代码来防止重复包含.h文件(我在.h文件的顶部使用了
#pragma once
( - 可以选择添加一个main.cpp来调用函数
- 提供do_something((的代码
- 使用编译。
g++ *.cpp -o main
好问题!
以下是文件:
// main.cpp
//
#include <iostream>
#include "file1.h"
#include "file2.h"
int main() {
test2();
std::cout << "Hello, World!" << std::endl;
return 0;
}
// file1.cpp
#include "file1.h"
#include "file2.h"
#include <iostream>
void do_something() {
std::cout << "Just hit do_something" << std::endl;
}
void test1() {
do_something();
// test2(); // Do not use double recursion.
}
// file1.h
#pragma once
void do_something();
void test1();
// file2.cpp
#include "file1.h"
#include "file2.h"
void test2() {
do_something();
test1();
}
// file2.h
#pragma once
void test2();
最好的答案是不要这样设计代码这引入了一个"循环依赖",它会立即使代码变得脆弱。此外,您编写示例的方式描述了一个双递归函数(a调用B,B调用a(,并且由于没有终止条件,因此它是无界的!正如你所看到的,这可能会导致一些非常难以控制的情况。
让我们暂时放弃良好的工程实践。你是如何描述这两个标题的&源文件是足够的,可以用以下命令构建:
g++ file1.cc file2.cc -o libCoupledRecursiveExample.so
这就是事情变得困难的地方:仅通过构建指令,您实际上无法检测依赖关系!好的静态代码检查器可以检测到这些情况并向您发出警告,但当您使用懒惰的编译器(如没有标志的g++
(时,很容易通过这样不会生成任何警告的代码进行窥探。
相关文章:
- 两个文件使用彼此的功能-如何解决
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 覆盖私有功能,它与受保护功能有何不同?
- OpenCV 错误的解决方案:不支持的格式或格式组合 - 当将 ORB 功能与 FlannBasedMatcher 匹配
- C++ 由于无法解决过载功能而导致绑定失败
- 功能和变量从何而来
- G 无法解决模板功能过载
- 如何解决访问不同功能的"nonstatic member reference must be relative to a specific object"
- 虚拟静态函数功能的解决方法
- 如何在我的指针和阵列功能中修复未解决的外部错误-LNK2019和LNK1120
- 错误LNK2019:未解决的外部符号-MSVC调试构建功能模板
- 类功能中未解决的外部符号
- 虚拟模板功能解决方法
- 控制达到非空功能结束.我该如何解决这个问题
- 我不明白这些功能有何不同
- 无法解决的功能'srand'?(我正在使用 Ubuntu OS 和 Eclipse)
- 与操作员'<<'不匹配 有人可以帮助解决无效功能错误吗?[C++]
- 具有进程间通信功能的服务器-客户端日志记录体系结构.你知道解决方案吗?
- 禁止虚拟模板功能的解决方法
- 无'rvalue references to *this'功能的解决方法