为什么 vs code 中头文件里有些只有定义,没有内容的函数?
basic_string(initializer_list<_CharT> __il);
为什么 vs code 中头文件里有些只有定义,没有内容的函数?
basic_string(initializer_list<_CharT> __il);
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题回答: 在 vs code 中的头文件中,如果有只有定义没有内容的函数,一般是因为这些函数是由其他库或者头文件来实现的,而当前的头文件只是为了让编译器知道这些函数的存在,以便在使用到这些函数时不会出现 undefined reference 的错误。 例如,在 C++ 中,string 头文件中就有以下代码:
# define __CXX_DURIAN_SIMPLE 1
/**
* @brief Construct string from initializer_list.
* @param __a An initializer_list of CharT characters.
*
* Construct a string using initializer_list __a.
*/
template<typename _CharT, typename _Traits, typename _Allocator>
basic_string<_CharT, _Traits, _Allocator>::
basic_string(initializer_list<_CharT> __a)
{
_M_construct(__a.begin(), __a.end(), __a.size(),
random_access_iterator_tag());
}
这个函数的实现其实是在 basic_string 的类定义中,而头文件中只有一个函数声明。 案例: 假设我们有一个 A.h 头文件,其中定义了一个类 A,类中有一个只有声明没有实现的函数 foo():
#ifndef A_H
#define A_H
class A {
public:
void foo();
};
#endif // A_H
然后我们在另一个文件 main.cpp 中使用了这个类,但是并没有实现 foo() 函数,编译时会出现 undefined reference 错误:
#include "A.h"
int main() {
A obj;
obj.foo();
return 0;
}
为了避免这个错误,我们可以在 A.h 头文件中添加一个只有声明没有实现的 foo() 函数:
#ifndef A_H
#define A_H
class A {
public:
void foo();
};
// 添加以下代码
void A::foo() {}
#endif // A_H
这样在 main.cpp 中就可以顺利编译运行了。 代码示例:
// A.h 文件
#ifndef A_H
#define A_H
class A {
public:
void foo();
};
#endif // A_H
// A.cpp 文件
#include "A.h"
void A::foo() {}
// main.cpp 文件
#include "A.h"
int main() {
A obj;
obj.foo();
return 0;
}