然后在main.cpp中调用这个成员函数,结果提示无法链接
inline成员函数的定义一定要与调用者在同一文件内么???
11 个解决方案
#1
内联函数的定义应该放在 头文件里,内联函数对编译器必须是可见的
#2
上代码, 代码好说话
#3
我晕死,这也要上代码?
好,我现场给你写个
// test.h
class CTest
{
public:
inline void func();
};
// test.cpp
void CTest::func()
{
}
// main.cpp
#include "test.h"
int main()
{
CTest test;
test.func();
return 0;
};
#4
inline函数具有内部链接,需要把inline函数的实现放到.h文件中
#5
你有两个选择:
1、直接在类中将函数定义(inline可以省略),当然函数实现要紧跟其后;
2、在类中只定义函数,类外函数实现的时候,类外要加上inline。
1、直接在类中将函数定义(inline可以省略),当然函数实现要紧跟其后;
2、在类中只定义函数,类外函数实现的时候,类外要加上inline。
#6
续楼上,写在类外,并在头文件中,
另代码过长,即使加了inline,也不是内联函数
另代码过长,即使加了inline,也不是内联函数
#7
++
#8
是因为,inline就是把累的简单函数中的代码直接展开,主要用于取代C语言中的宏定义的,所以,定义inline函数一定要在H文件中。而inline函数必须简单,否则即使写上inline约束,也会被编译器决议为函数调用的。
详细的关于inline的解释,请参照:http://blog.csdn.net/lightlater/archive/2010/08/29/5848200.aspx
详细的关于inline的解释,请参照:http://blog.csdn.net/lightlater/archive/2010/08/29/5848200.aspx
#9
test.cpp不包含test.h,又怎么能去定义CTest类里的一个成员函数呢. test.cpp根本不知道CTest是什么,也不知道它里边有什么
#10
#ifndef TEST_H
#define TEST_H
#include <iostream>
using namespace std;
class CTest
{
public:
inline void func();
};
inline void CTest::func()
{
cout<<"111"<<endl;
}
#endif
#include <stdio.h>
#include "test.h"
int main()
{
CTest c;
c.func();
return 0;
}
#11
复制下我以前处理类似问题时做的笔记:
函数声明为inline形式即被编译器处理为类似 include的方式,即把一个inline函数的内容引入另一个调用它的函数中,而不会经过函数调用的处理过程。
inline模式编译的函数,只能在定义存在的本cpp中调用,在其他的cpp中调用的话,就有符号问题,最好命名空间中给外部用的都给不用inline声明,要不然带上命名空间的符号parse打乱会产生很迷惑的链接时错误。这是因为inline是在编译器里处理的,不是在链接器的时候处理的,一个合格的inline(过于复杂的就不会被编译器当做inline处理了),它是没有符号的,可以当做是一个写成函数样子的宏。
/:^)
函数声明为inline形式即被编译器处理为类似 include的方式,即把一个inline函数的内容引入另一个调用它的函数中,而不会经过函数调用的处理过程。
inline模式编译的函数,只能在定义存在的本cpp中调用,在其他的cpp中调用的话,就有符号问题,最好命名空间中给外部用的都给不用inline声明,要不然带上命名空间的符号parse打乱会产生很迷惑的链接时错误。这是因为inline是在编译器里处理的,不是在链接器的时候处理的,一个合格的inline(过于复杂的就不会被编译器当做inline处理了),它是没有符号的,可以当做是一个写成函数样子的宏。
/:^)
#1
内联函数的定义应该放在 头文件里,内联函数对编译器必须是可见的
#2
上代码, 代码好说话
#3
我晕死,这也要上代码?
好,我现场给你写个
// test.h
class CTest
{
public:
inline void func();
};
// test.cpp
void CTest::func()
{
}
// main.cpp
#include "test.h"
int main()
{
CTest test;
test.func();
return 0;
};
#4
inline函数具有内部链接,需要把inline函数的实现放到.h文件中
#5
你有两个选择:
1、直接在类中将函数定义(inline可以省略),当然函数实现要紧跟其后;
2、在类中只定义函数,类外函数实现的时候,类外要加上inline。
1、直接在类中将函数定义(inline可以省略),当然函数实现要紧跟其后;
2、在类中只定义函数,类外函数实现的时候,类外要加上inline。
#6
续楼上,写在类外,并在头文件中,
另代码过长,即使加了inline,也不是内联函数
另代码过长,即使加了inline,也不是内联函数
#7
++
#8
是因为,inline就是把累的简单函数中的代码直接展开,主要用于取代C语言中的宏定义的,所以,定义inline函数一定要在H文件中。而inline函数必须简单,否则即使写上inline约束,也会被编译器决议为函数调用的。
详细的关于inline的解释,请参照:http://blog.csdn.net/lightlater/archive/2010/08/29/5848200.aspx
详细的关于inline的解释,请参照:http://blog.csdn.net/lightlater/archive/2010/08/29/5848200.aspx
#9
test.cpp不包含test.h,又怎么能去定义CTest类里的一个成员函数呢. test.cpp根本不知道CTest是什么,也不知道它里边有什么
#10
#ifndef TEST_H
#define TEST_H
#include <iostream>
using namespace std;
class CTest
{
public:
inline void func();
};
inline void CTest::func()
{
cout<<"111"<<endl;
}
#endif
#include <stdio.h>
#include "test.h"
int main()
{
CTest c;
c.func();
return 0;
}
#11
复制下我以前处理类似问题时做的笔记:
函数声明为inline形式即被编译器处理为类似 include的方式,即把一个inline函数的内容引入另一个调用它的函数中,而不会经过函数调用的处理过程。
inline模式编译的函数,只能在定义存在的本cpp中调用,在其他的cpp中调用的话,就有符号问题,最好命名空间中给外部用的都给不用inline声明,要不然带上命名空间的符号parse打乱会产生很迷惑的链接时错误。这是因为inline是在编译器里处理的,不是在链接器的时候处理的,一个合格的inline(过于复杂的就不会被编译器当做inline处理了),它是没有符号的,可以当做是一个写成函数样子的宏。
/:^)
函数声明为inline形式即被编译器处理为类似 include的方式,即把一个inline函数的内容引入另一个调用它的函数中,而不会经过函数调用的处理过程。
inline模式编译的函数,只能在定义存在的本cpp中调用,在其他的cpp中调用的话,就有符号问题,最好命名空间中给外部用的都给不用inline声明,要不然带上命名空间的符号parse打乱会产生很迷惑的链接时错误。这是因为inline是在编译器里处理的,不是在链接器的时候处理的,一个合格的inline(过于复杂的就不会被编译器当做inline处理了),它是没有符号的,可以当做是一个写成函数样子的宏。
/:^)