C++:我不能给头文件中的变量赋值

C ++: Cannot I assign values to a variable in header file?

本文关键字:变量 赋值 文件 不能 C++      更新时间:2023-10-16

标头.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是一个语句。语句只允许在函数中使用。头文件中的行不在函数中。因此,它无法工作。