"Variable was not declared in this scope" C 和 C++ 语言
"Variable was not declared in this scope" in C and C++
我发现今天C和C++之间有区别。我把程序分为两个不同的文件,这是我的C测试:
/* in file main.c*/
#include <stdio.h>
int main()
{
int a = 3, b = 4;
int c = sum(a, b);
printf("%dn", 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
。如果我在文件main.cpp
中放入声明int sum(int, int)
,则不会发生错误。为什么C和C++之间有如此不同?解决问题的最佳方法是什么?
这是C++引入的一个特性:除非您实际看到了声明或定义,否则不要假设您知道函数签名。使得在编译器&链接过程,并且C++名称篡改参数的确切类型需要知道代码需要链接到哪个符号-类型的确定是基于与候选符号的匹配,可以使用各种标准转换/隐式构造/隐式强制转换。
解决这个问题的正确方法是创建一个sum.h
头文件:
#ifndef SUM_H
#define SUM_H
int sum(int, int);
#endif
这应该包含在第一行或sum.cpp
中(因此,如果sum.h
的内容演变为依赖于<iostream>
的内容,但忘记了包含它本身,则会出现错误),并且在main.cpp
中,根据您的喜好在其他内容之前或之后包含(我担心大多数人会放在后面,但这是一种风格选择)。
当然,创建h文件是最好的选择。但至少可以在main
之前包含sum
函数声明,例如:
/* in file main.c*/
#include <stdio.h>
// external function declaration (instead of h-file)
int sum(int, int);
int main()
{
int a = 3, b = 4;
int c = sum(a, b);
printf("%dn", c);
return 0;
}
相关文章:
- 不同语言中相同代码的不同行为
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- r语言 - C++ 类型为"const std ::?
- 通用C++/Python 多语言的存在
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- 了解算法的性能差异(如果以不同的编程语言实现)
- Rextester 语言编译C++问题
- 如何将多种语言设置放在单个 .clang 格式文件中
- 不同语言中的模运算符差异
- 刚接触C++,难以理解语言的细微差别
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 我的C++语言蛮力算法有问题
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 为什么编程语言被编译为汇编程序而不是二进制?
- QDirIterator语言 - No hasNext not FilePath reaction
- "C.UTF-8" C++ Windows 上的语言环境?
- 了解 cin.fail() 和 cin.clear语言 - Vector 追加程序
- '_HAS_CXX17'宏是否可用于自定义项目标头以启用C++17 语言集功能?
- 有没有办法为macOS上的C++程序指定自定义语言环境目录