程序#1
// file.h
class File
{
public:
static const int var = 9;
};
Run Code Online (Sandbox Code Playgroud)
-
// main.cpp
#include <iostream>
#include "file.h"
using namespace std;
int main() {
File f;
cout << f.var;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序#2
// file.h
int GlobalVar ;
class File
{
public:
static const int var = 9;
};
Run Code Online (Sandbox Code Playgroud)
-
// main.cpp
extern int GlobalVar;
#include <iostream>
#include "file.h"
using namespace std;
int main() {
cout << GlobalVar;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
程序#1运行正常,但程序#2给出链接器错误:
error LNK2005: "int GlobalVar" (?x@@3HA) already defined in file.obj
Run Code Online (Sandbox Code Playgroud)
我知道头文件永远不会被编译.那么在上面的例子中,编译器如何知道变量var的定义,但是却找不到定义GlobalVar
?这两个程序有什么区别?
当你使用
#include "some_header.h"
Run Code Online (Sandbox Code Playgroud)
要么
#include <some_header.h>
Run Code Online (Sandbox Code Playgroud)
这些include
指令直接由预处理器替换,内容为some_header.h
.
因此,在编译cpp
文件时,它实际上包含了内容some_header.h
.这就是编译这段代码的方法.
* - 如果你有包含警卫,我会被跳过的内容,如果它已经包含在其他标题中
编辑:关于你的编辑 - 关于extern
:这不是正确的方法.
extern int GlobalVar ;
Run Code Online (Sandbox Code Playgroud)
应放在标题中,并且
int Globalvar ;
Run Code Online (Sandbox Code Playgroud)
应该在cpp文件中.您应该阅读更多内容extern
,了解它是如何工作的以及它做了什么(提示:假设您只想拥有一个变量,在一个地方定义并且可以在多个cpp文件中访问 - 你会怎么做?有很多关于这个案例,SO中的问题也是如此).
归档时间: |
|
查看次数: |
108 次 |
最近记录: |