C++ c++;即使有外部变量,变量的多重定义

C++ 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

我一直在试图修复我的多重定义错误,大多数答案似乎是使用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 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";