必胜的小铭 2024-03-25 20:22 采纳率: 100%
浏览 6
已结题

为什么 vs code 中头文件里有些只有定义,没有内容的函数?

为什么 vs code 中头文件里有些只有定义,没有内容的函数?

basic_string(initializer_list<_CharT> __il);
  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-25 20:22
    关注
    让阿豪来帮你解答,本回答参考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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 数据量少可以用MK趋势分析吗
  • ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中