C++:我不能给头文件中的变量赋值
C ++: Cannot I assign values to a variable in header file?
标头.h
int m_linkinfo;
m_linkinfo = 1;
main.cpp
#include "header.h"
int main()
{
return 0;
}
失败,有许多错误。但如果我评论m_linkinfo = 1;
这行,一切都还好。为什么?我不能给头文件中的变量赋值吗?但是,如果我将头文件更改为只有一行:int m_linkinfo = 1;
,则程序编译成功!为什么?它与上面的两行代码不同吗?
不,你不能。这是一段代码,因此它需要存在于某种函数中,例如:
int main () {
m_linkinfo = 1;
return 0;
}
正如您所看到的,可以用初始化
int m_linkinfo = 1;
但是,因为这是标准允许的。
请记住,在头文件中定义内容通常是有风险的。我所说的define指的是创建事物的语句,而不是那些简单地通知编译器事物存在(声明(的语句。
这是因为将标题包含在两个不同的翻译单元中可能会导致一个名称相同的东西的两个副本,如果你随后试图将它们链接在一起,你会遇到麻烦。
解决这个问题的最佳方法是在头文件中声明内容,例如:
extern int m_linkinfo;
并在非头文件(如CPP(中定义它们:
int m_linkinfo = 1;
这样,每个包含头的翻译单元都知道m_linkinfo
,但只有CPP文件创建它。
C不允许函数之外的代码。在您的示例中:
int m_linkinfo;
m_linkinfo = 1;
第二行是非法的,因为它不在函数中。
在函数之外,您只能声明或定义变量和函数(或为预处理器提供指示(。
然而,当您定义变量时,您可以初始化它,所以您可以这样做:
int m_linkinfo = 1;
这是完全合法的。
Assignment是一个语句。语句只允许在函数中使用。头文件中的行不在函数中。因此,它无法工作。
相关文章:
- 为"adjacent"变量赋值时出现问题
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 如何在不使用赋值运算符的情况下为动态变量赋值?
- 为什么我不能为变量赋值函数?
- 可视化的c++变量赋值使代码正常工作
- 如何为结构类型变量赋值
- 使用 boost python 从 c++ 为 python 中的类成员变量赋值
- QT变量赋值,<没有这样的值>,SIGSEGV
- C++:为全局类变量赋值
- 从类外部为类中的变量赋值
- 在 c++ 中为字符串变量赋值
- 为类中的私有静态变量赋值
- 使用类为变量赋值 (C++)
- 在编译时为变量赋值
- C ++变量赋值,这是正常的方式吗
- 在C++中为类变量赋值后声明类变量
- 了解工厂方法和静态变量赋值的返回值优化 (Visual Studio)
- 如何在 c++ 中从函数获取返回值而不为其变量赋值
- 简单的引用变量赋值导致对象的全局指针出现segfault