Search code examples
c++inline

C++ : undefined reference issue in a simple case of separate compilation


Given the below class definition in the header file - "class1.h"

#ifndef CLASS1_H
#define CLASS1_H

class class1
{
public:
    class1 &fcn();    
};

#endif

and the member function fcn is defined in the source file - "class1.cpp"

#include "class1.h"

#include<iostream>

inline class1 &class1::fcn()
{
    std::cout << "Welcome to Class1" << std::endl;
    return *this;
}

when the following code in "main.cpp" is executed

#include <iostream>
#include "class1.h"

int main()
{
    class1 myclass;
    myclass.fcn();
}

it produces the following error

C:\...\rough>g++ main.cpp class1.cpp && a
C:\...\Local\Temp\ccJvpsRr.o:main.cpp:(.text+0x15): undefined reference to `class1::fcn()'
collect2.exe: error: ld returned 1 exit status

What went wrong?


Solution

  • The inline keyword is the problem. You are supposed to use that with functions that are defined in headers. In your case, remove it and it should work fine.