c++在类成员函数上执行 __inline__ 时出现链接错误:找不到符号

发布于 2024-11-30 09:25:40 字数 773 浏览 3 评论 0原文

我试图强制内联一个成员函数,但出现错误:

"a_class::mem_func()", referenced from:
func(a_class&)    in func.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

产生错误的蒸馏代码

a_class.h
    #ifndef A_CLASS_H  #define A_CLASS_H
    class a_class {public: __inline__ void mem_func(); };
    #endif

a_class.cpp
    #include "a_class.h"
    __inline__ void a_class::mem_func() {}

func.h
    #ifndef FUNC_H  #define FUNC_H  #include"a_class.h"
    void func(a_class & obj);
    #endif

func.cpp
    #include "func.h"
    void func(a_class & obj) {obj.mem_func();}

main.cpp
    #include <iostream>  #include "func.h"  #include "a_class.h"
    int main () {a_class obj; func(obj);}

这是我正在使用 Xcode / gcc

I'm trying to force inline a member function and I get the error:

"a_class::mem_func()", referenced from:
func(a_class&)    in func.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

here is the distilled error-producing code

a_class.h
    #ifndef A_CLASS_H  #define A_CLASS_H
    class a_class {public: __inline__ void mem_func(); };
    #endif

a_class.cpp
    #include "a_class.h"
    __inline__ void a_class::mem_func() {}

func.h
    #ifndef FUNC_H  #define FUNC_H  #include"a_class.h"
    void func(a_class & obj);
    #endif

func.cpp
    #include "func.h"
    void func(a_class & obj) {obj.mem_func();}

main.cpp
    #include <iostream>  #include "func.h"  #include "a_class.h"
    int main () {a_class obj; func(obj);}

I'm using Xcode / gcc

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧梦荧光笔 2024-12-07 09:25:40

如果您想确保您的函数是内联的,请移动标题中的定义:

a_class.h
    #ifndef A_CLASS_H  #define A_CLASS_H
    class a_class {public: __inline__ void mem_func() {} /*<-definition*/; };
    #endif

If you want to make sure your function is inlined, move the definition in the header:

a_class.h
    #ifndef A_CLASS_H  #define A_CLASS_H
    class a_class {public: __inline__ void mem_func() {} /*<-definition*/; };
    #endif
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文