在C和C ++中,“变量未在此范围内声明”

panqihg

今天,我发现C和C ++之间存在差异。我将程序分为两个不同的文件,这是我的C测试:

/* in file main.c*/
#include <stdio.h>

int main()
{
    int a = 3, b = 4;
    int c = sum(a, b);
    printf("%d\n", c);
}

/* In file sum.c */
#include <stdio.h>

int sum(int x, int y)
{
    return x + y;
}

然后,我编译了它们gcc main.c sum.c,没有错误,结果是正确的。以下是我的C ++测试,我还将它们分为两个不同的文件:

/* in file main.cpp*/
#include <iostream>

int main()
{
    int a = 3, b = 4;
    int c = sum(a, b);
    std::cout << c << std::endl;
}

/* In file sum.cpp */
#include <iostream>

int sum(int x, int y)
{
    return x + y;
}

编译它们g++ main.cpp sum.cpp发生错误:error: ‘sum’ was not declared in this scope如果我int sum(int, int)在文件中放入声明main.cpp,则不会发生错误。为什么C和C ++有如此大的不同?解决问题的最佳方法是什么?

托尼·德罗伊

这是C ++引入的功能:除非您实际看到过声明或定义,否则不要以为您知道函数签名。使更容易在编译器和链接过程中更早地报告不正确的函数使用情况,并且使用C ++名称修饰,需要实参的确切类型才能知道代码将要针对的符号-类型确定基于与候选对象的匹配,并可以进行各种标准转换/隐式构造/隐式转换。

解决此问题的正确方法是创建sum.h头文件:

#ifndef SUM_H
#define SUM_H
int sum(int, int);
#endif

应该将其包含在第一行中sum.cpp(因此,如果sum.h内容演变为依赖于<iostream>内容,但忘记将其本身包含在内,则会出现错误),并且在main.cpp其他内容包含之前或之后随便添加(我会警告大多数人会放在后面,但这是一种风格选择)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

未在此范围内声明的C ++模板成员函数

来自分类Dev

错误:未在此范围内使用C ++声明

来自分类Dev

错误:未在此范围内使用C ++声明

来自分类Dev

未在此范围内声明C ++构建错误

来自分类Dev

错误:未在此范围内声明“对象”(C ++)

来自分类Dev

在C ++中未在此范围内声明“ get_call”

来自分类Dev

在C ++中未在此范围内声明“ get_call”

来自分类Dev

Android JNI C ++中的“未在此范围内声明”错误

来自分类Dev

C ++:为什么在包含标头时出现“未在此范围内声明”错误?

来自分类Dev

在C ++中使用类时,函数“未在此范围内声明”

来自分类Dev

c ++:混淆为什么编译器给出未在此范围内声明的错误

来自分类Dev

未在此范围内声明“加速度计”和“ lcd”

来自分类Dev

openCV 'cvPoint' 和 'CV_FONT_HERSHEY_SIMPLEX' 未在此范围内声明

来自分类Dev

C ++编译错误构建arduino项目:在此范围内未声明变量

来自分类Dev

C ++编译错误构建arduino项目:在此范围内未声明变量

来自分类Dev

未在此范围内声明的变量

来自分类Dev

c4-pedestrian-detector.cpp:283:8:错误:未在此范围内声明'Show_Detection_Steps'

来自分类Dev

将 .ui 文件导入 Qt5 C++ 时出现错误“未在此范围内声明”

来自分类Dev

在此范围内未声明stof函数c ++

来自分类Dev

错误:在此范围内未声明“长度” c ++

来自分类Dev

C ++-在此范围内未声明stoi()

来自分类Dev

在此范围内未声明字符串C ++

来自分类Dev

C ++-在此范围内未声明stoi()

来自分类Dev

没有在此范围内声明错误,C ++

来自分类Dev

如何修复C ++中的'arrStud在此范围内未声明'错误

来自分类Dev

编译器错误:C代码中“在此范围内未声明'e'”

来自分类Dev

未在范围内声明C ++数组类的定义和实现?

来自分类Dev

未在此范围内声明的Modelica变量

来自分类Dev

未在此范围内声明的Opencv变量

Related 相关文章

  1. 1

    未在此范围内声明的C ++模板成员函数

  2. 2

    错误:未在此范围内使用C ++声明

  3. 3

    错误:未在此范围内使用C ++声明

  4. 4

    未在此范围内声明C ++构建错误

  5. 5

    错误:未在此范围内声明“对象”(C ++)

  6. 6

    在C ++中未在此范围内声明“ get_call”

  7. 7

    在C ++中未在此范围内声明“ get_call”

  8. 8

    Android JNI C ++中的“未在此范围内声明”错误

  9. 9

    C ++:为什么在包含标头时出现“未在此范围内声明”错误?

  10. 10

    在C ++中使用类时,函数“未在此范围内声明”

  11. 11

    c ++:混淆为什么编译器给出未在此范围内声明的错误

  12. 12

    未在此范围内声明“加速度计”和“ lcd”

  13. 13

    openCV 'cvPoint' 和 'CV_FONT_HERSHEY_SIMPLEX' 未在此范围内声明

  14. 14

    C ++编译错误构建arduino项目:在此范围内未声明变量

  15. 15

    C ++编译错误构建arduino项目:在此范围内未声明变量

  16. 16

    未在此范围内声明的变量

  17. 17

    c4-pedestrian-detector.cpp:283:8:错误:未在此范围内声明'Show_Detection_Steps'

  18. 18

    将 .ui 文件导入 Qt5 C++ 时出现错误“未在此范围内声明”

  19. 19

    在此范围内未声明stof函数c ++

  20. 20

    错误:在此范围内未声明“长度” c ++

  21. 21

    C ++-在此范围内未声明stoi()

  22. 22

    在此范围内未声明字符串C ++

  23. 23

    C ++-在此范围内未声明stoi()

  24. 24

    没有在此范围内声明错误,C ++

  25. 25

    如何修复C ++中的'arrStud在此范围内未声明'错误

  26. 26

    编译器错误:C代码中“在此范围内未声明'e'”

  27. 27

    未在范围内声明C ++数组类的定义和实现?

  28. 28

    未在此范围内声明的Modelica变量

  29. 29

    未在此范围内声明的Opencv变量

热门标签

归档