Skip to main content
Post Closed as "Duplicate" by user2864740, πάντα ῥεῖ c++
edited tags; edited title
Link
user2864740
  • 62.5k
  • 15
  • 159
  • 234

Why can I not inline the add()a function ofin my class?

Source Link
jimjampez
  • 1.9k
  • 4
  • 21
  • 32

Why can I not inline the add() function of my class?

I am learning c++ by writing commons data structures and I have a compiler warning that my inlined add method is not defined.

src/vector.h:10:14: warning: inline function 'Vector::add' is not defined [-Wundefined-inline] inline void add(const float val); 

What am I doing wrong? As far as I can tell the methods match up. However if I remove the inline method, it works fine but the first invocation of add takes 11380us but the 2nd and 3rd are around 3667us -nearly 4x penalty cost.

src/vector.h

//#include <cstddef> class Vector { public: explicit Vector(const int n); explicit Vector(const int n, const float val); float& operator[](const int i); inline int const length(); inline void fill(const float val); inline void add(const float val); inline float sum(); private: float* arr; int len; }; 

src.vector.cpp

#include "vector.h" #include <iostream> #include <algorithm> #include "yepCore.h" #include "yepMath.h" #include "yepLibrary.h" #include <cstdlib> using namespace std; inline void Vector::add(const float val) { chrono::steady_clock::time_point start = chrono::steady_clock::now(); for (int i = 0; i < len; ++i) { arr[i] += val; } chrono::steady_clock::time_point end = chrono::steady_clock::now(); cout << "yepp add took " << chrono::duration_cast<chrono::microseconds>(end - start).count() << "us.\n"; } /** template <> void Vector<float>::add(const float val) { chrono::steady_clock::time_point start = chrono::steady_clock::now(); yepCore_Add_V32fS32f_V32f(arr, val, arr, len); chrono::steady_clock::time_point end = chrono::steady_clock::now(); cout << "yepp add took " << chrono::duration_cast<chrono::microseconds>(end - start).count() << "us.\n"; } ...