为啥我不能在我的类中内联函数? [复制]
Posted
技术标签:
【中文标题】为啥我不能在我的类中内联函数? [复制]【英文标题】:Why can I not inline a function in my class? [duplicate]为什么我不能在我的类中内联函数? [复制] 【发布时间】:2014-09-29 17:28:35 【问题描述】:我正在通过编写公共数据结构来学习 c++,但我收到了一个编译器警告,提示我的内联 add 方法没有定义。
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";
...
【问题讨论】:
我应该指出它是模板化的,但为了简化和调试而将其删除,因为我认为这是因为模板化,但问题仍然存在。 见这里 - ***.com/questions/5057021/… 这不是重复的,因为我在标题中添加了一个定义。请在标记重复之前阅读我的问题。 这是一个声明,而不是一个定义。我没有重复这一点,但这是相当成熟的基础。见***.com/questions/1410563/… 【参考方案1】:内联函数必须在标题中定义。如果它们没有在头文件中定义,那么函数就不能被内联,因为调用者将没有定义。
【讨论】:
如果只在源文件中使用,可以在源文件中定义。并且不在标头中的函数仍然可以内联。 @NeilKirk 然后你会有一个不同的类的声明和定义。 @NeilKirk 因为您正在定义一个未声明的函数。它仍然可以编译和工作,但只是在语义上它们是不同的。 @Zan 但是我在我的头文件中添加了一个内联的 add 方法?以上是关于为啥我不能在我的类中内联函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
预处理conststaticsizeof-说明内联函数使用的场合