C++ c++;即使有外部变量,变量的多重定义
我一直在试图修复我的多重定义错误,大多数答案似乎是使用extern,但即使在我这么做之后,错误仍然存在 main.cppC++ c++;即使有外部变量,变量的多重定义,c++,C++,我一直在试图修复我的多重定义错误,大多数答案似乎是使用extern,但即使在我这么做之后,错误仍然存在 main.cpp #include "header.h" int main(){ ifstream indata; indata.open(file.c_str()); int x; while(indata){ indata >> x; print(x); } return 0; } 函数.cpp #include "header.h" void p
#include "header.h"
int main(){
ifstream indata;
indata.open(file.c_str());
int x;
while(indata){
indata >> x;
print(x);
}
return 0;
}
函数.cpp
#include "header.h"
void print(int x){
cout << x << endl;
}
我得到的错误信息是
make
g++ -c main.cpp
In file included from main.cpp:1:0:
header.h:11:15: warning: ‘file’ initialized and declared ‘extern’
extern string file="testFile.txt";
^
g++ -c functions.cpp
In file included from functions.cpp:1:0:
header.h:11:15: warning: ‘file’ initialized and declared ‘extern’
extern string file="testFile.txt";
^
g++ main.o functions.o -o main
functions.o:functions.cpp:(.bss+0x0): multiple definition of `file'
main.o:main.cpp:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
Makefile:10: recipe for target 'main' failed
make: *** [main] Error 1
有人能在这里给我指出正确的方向吗。在标题中声明它。h:
extern string file;
并在.cpp文件中定义它:
string file = "testFile.txt";
否则,包含header.h的所有内容都将有自己的
文件定义,从而导致出现“文件的多重定义”错误。外部声明是要显示给每个翻译单元的声明,而不是定义
考虑什么都不留下,只留下
extern string file;
在标题中,然后将定义移动到其中一个源文件:
string file = "testFile.txt";
您的初始值设定项“覆盖”了extern
关键字,使该行成为定义而不是声明
你不能既有蛋糕又吃
Extern是一个指令,用于告诉链接器符号的定义在另一个对象文件中可用。extern是一个声明说明符,即它不是一个定义。不应定义声明为extern的变量
作为实践,在头文件中定义全局变量是不好的。这就是多重定义错误的原因。这是因为您的头文件包含在两个cpp文件中
解决方案:
从收割台上拆下。h
extern string file=“testFile.txt”
添加到functions.cpp
string file=“testFile.txt”
添加到main.cpp
外部声明外部字符串文件 与问题无关,但不要在标题中包含名称空间。(使用命名空间x
)更多信息:
extern string file;
string file = "testFile.txt";