vol*_*zer 3 c++ linker redefinition
我试图从分离的.cpp文件中使用全局变量.我有一个init.h文件:
//init.h
#ifndef init
#define init
int a = 3;
#endif
Run Code Online (Sandbox Code Playgroud)
我有一个init.cpp文件:
//init.cpp
#include init.h
最后我的main.cpp文件是:
//main.cpp
#include "init.h"
int main(void)
{
while(1)
{
}
}
Run Code Online (Sandbox Code Playgroud)
在此之后,我收到错误:
1>init.obj : error LNK2005: "int a" (?a@@3HA) already defined in main.obj
1> ..deneme.exe : fatal error LNK1169: one or more multiply defined symbols found
Run Code Online (Sandbox Code Playgroud)
为什么我的#infdef控件无法解决这个问题?我也试过使用,#pragma once但我得到了同样的错误.我的代码出了什么问题?
您需要将变量标记为extern并在实现文件中仅定义一次.
正如代码现在,你正在打破一个定义规则.在这种情况下,包含警卫没有帮助,因为包含该标头的所有翻译单元都重新定义变量.
你真正需要的是什么:
//init.h
#ifndef init
#define init
extern int a;
#endif
Run Code Online (Sandbox Code Playgroud)
和定义:
//init.cpp
#include "init.h"
int a = 3;
Run Code Online (Sandbox Code Playgroud)
另外,在使用全局变量之前请三思.你实际上想要实现的是什么?
| 归档时间: |
|
| 查看次数: |
2133 次 |
| 最近记录: |