Ошибка связывания c ++ при выполнении __inline__ для функции-члена класса: символ не найден - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь принудительно встроить функцию-член и получаю ошибку:

"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

1 Ответ

4 голосов
/ 18 августа 2011

Если вы хотите убедиться, что ваша функция встроена, переместите определение в заголовок:

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