我遗漏了一些基本的东西。
我希望函数foo()在不同文件的子例程中可见。
A \ B \ C \ d \ one.cpp
#if xyz
void foo() { ...
a \ two.cpp
void foo();
#if abc
uint8_t top(uint8_ val) {
foo();
当链接two.cpp时,我没有为foo()定义错误。
一个\ three.cpp
#if jkl
foo();
foo()在three.cpp
中工作正常没有名称空间。
我哪里错了?
答案 0 :(得分:0)
我遗漏了一些基本的东西。
对于要链接在一起的.o文件的任何组合,foo()的定义只能存在一次。 (ODR)但可以根据需要多次声明。
但是,我会选择使用“声明”行的单个.hh文件:
也许“foo.hh”会包含
extern void foo(); // this declares the foo function
任何使用'foo'的.cc文件都会#include .hh文件。
只有一个.cc文件必须实现函数体,它还应该包含.hh文件。
也许“foo.cc”可能包含
#include "foo.hh"
void foo() {
// implement
}
最后,将.o(从编译.cc文件)链接到main.o。
答案 1 :(得分:0)
问题归结为在C模块中使用C ++函数。一旦我意识到我正在使用C模块,我就创建了一个C版本的foo()。那个,以及一些类似的项目,解决了这个问题。