gpt4 book ai didi

c++ - 全局函数定义

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:48 25 4
gpt4 key购买 nike

我缺少一些基本的东西。

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

a\three.cpp

#if jkl
foo();

foo() 在 three.cpp 中运行良好

没有命名空间。

我哪里错了?

最佳答案

I'm missing something basic.

对于链接在一起的任何.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 链接。

关于c++ - 全局函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46166771/

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