为什么我不能在课堂上内联函数?

时间:2014-09-29 17:28:35

标签: c++ c++11 inline

我正在通过编写公共数据结构来学习c ++,并且我有一个编译器警告我没有定义我的内联添加方法。

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

我做错了什么?据我所知,方法匹配。但是,如果我删除了内联方法,它可以正常工作,但第一次调用add需要11380us,但第二次和第三次调用大约是3667us - 大约是4倍的惩罚成本。

的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";

}
...

1 个答案:

答案 0 :(得分:5)

必须在标题中定义内联函数。如果未在头文件中定义它们,则无法内联该函数,因为调用者不具有该定义。