我正在通过编写公共数据结构来学习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";
}
...
答案 0 :(得分:5)
必须在标题中定义内联函数。如果未在头文件中定义它们,则无法内联该函数,因为调用者不具有该定义。