"..."的多重定义c

muc*_*isk 6 c++ header

我有一个头文件"USpecs.h":

#ifndef USPECS_H
#define USPECS_H
#include "Specs.h"


#include <iostream>
#include <vector>

std::vector<Specs*> UcakSpecs;


#endif
Run Code Online (Sandbox Code Playgroud)

我在main函数和另一个名为Ucak的类中使用此标头.

但是当我构建它时会发生以下错误:

Ucak.cpp | 6 |`UcakSpecs'的多重定义|

正如我之前搜索的那样,#ifndef应该没问题,但事实并非如此.

Mik*_*our 8

包含保护仅阻止单个翻译单元内的多个定义(即包含其头部的单个源文件).当您包含来自多个源文件的标头时,它们不会阻止多个定义.

相反,你应该在标题中有一个声明:

extern std::vector<Specs*> UcakSpecs;
Run Code Online (Sandbox Code Playgroud)

和一个(只有一个)源文件中的定义:

std::vector<Specs*> UcakSpecs;
Run Code Online (Sandbox Code Playgroud)