• C++:添加头文件时出错C3646和C4430


    error C3646: “name”: 未知重写说明符

    error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

    有一个例子:

    文件1:ReadData.h

    1. #pragma once
    2. int fun(int i, int j);

    文件2:ReadData.cpp

    1. #include
    2. #include "ReadData.h"
    3. using namespace std;
    4. int fun(int i, int j)
    5. {
    6. return i + j;
    7. }

    文件3:run_main.cpp

    1. #include
    2. #include "ReadData.h"
    3. using namespace std;
    4. int main()
    5. {
    6. cout << "输出结果如下:" << endl;
    7. cout << fun(3, 4) << endl;
    8. return 0;
    9. }

    运行一下,一切都很正常。

    但是,当我在头文件1中添加一个结构体时

    文件1修改:ReadData.h

    1. #pragma once
    2. struct _STU
    3. {
    4. string name;
    5. int age;
    6. };
    7. int fun(int i, int j);

     运行时就出错了。。

    当我把文件2和3的头文件调整一下后

    文件2:ReadData.cpp

    1. #include
    2. using namespace std; //这两行换下顺序
    3. #include "ReadData.h" //这两行换下顺序
    4. int fun(int i, int j)
    5. {
    6. return i + j;
    7. }

     文件3:run_main.cpp

    1. #include
    2. using namespace std; //这两行换下顺序
    3. #include "ReadData.h" //这两行换下顺序
    4. int main()
    5. {
    6. cout << "输出结果如下:" << endl;
    7. cout << fun(3, 4) << endl;
    8. return 0;
    9. }

    又可以正常运行了。

    要理解添加头文件其实是把头文件的内容展开放在头文件include的地方

    这里头文件h中添加了一个结构体,结构体中用到了string类型

    而这个类型需要std支持,当头文件在#include 之前时,是找不到string类型的

    所以报错

    假如头文件在#include 之后,using namespace std;之前的话,上述代码也会报错,可以将string --> std::string这样修改,不会报错了就。

    一定要注意加载的先后顺序

  • 相关阅读:
    api-ms-win-crt-runtime-l1-1-0.dll文件加载失败是怎么造成的?怎么修复?
    Vue Props
    深入理解Java正则表达式及其应用
    慢 SQL 的致胜法宝
    RFID警用装备管理系统-公安警用装备管理可视化系统
    如何自学java怎么入门?我有秒招
    Golang sync.WaitGroup
    Quartz 的启动流程分析
    203. 数据库操作
    基于PHP+MySQL的小型企业客户关系管理系统
  • 原文地址:https://blog.csdn.net/cd_yourheart/article/details/126105230