全局函数定义

时间:2017-09-12 01:58:48

标签: c++

我遗漏了一些基本的东西。

我希望函数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()定义错误。

一个\ th​​ree.cpp

#if jkl
  foo();

foo()在three.cpp

中工作正常

没有名称空间。

我哪里错了?

2 个答案:

答案 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()。那个,以及一些类似的项目,解决了这个问题。