在没有类定义的标头中定义成员变量

Defining member variable in header without class definition

本文关键字:定义 成员 变量      更新时间:2023-10-16

我有两个文件,list.cppHeader.h。文件的片段如下。我知道如果头文件是用于类的,则设置不同。例如

class MyClass
{
public:
void foo();
int bar;
};

但是,由于我在这里并没有真正使用类(如果我错了,请纠正我(,我不能像下面这样在public:private下声明事情吗?

此外,如果我将全局变量rescan作为成员变量放在头文件中,则在函数定义下方,只有main函数可以看到该变量。为什么它不在其他功能范围内?

list.cpp

#include <boost/algorithm/string.hpp>
#include <vector>
using namespace std;
vector<int> results;
bool rescan;
int main() 
{
vector<vector<string>> list;
int success = readFile(list);
vector<vector<string>> bad = findMe(list);
system("pause");
return 0;
}
vector<vector<string>> findMe(vector<vector<string>> find)
{
rescan = true;
}

Header.h

#pragma once
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
#include <string>
#include <vector>
std::vector<std::vector<std::string>> findMe(std::vector<std::vector<std::string>>);
#endif

编辑:我在头文件中尝试过这个:

public:
bool rescan;

但是我得到了"语法错误:"公共">

如果您希望全局在其他翻译单元 (TU((其他文件(中可见,则必须在其他 TU 中extern声明它们:

标题.h:

// Include guard omitted 
extern bool rescan; // Declaration

文件.cpp

#include "Header.h"
bool rescan = false; // Definition
// ...

文件2.cpp

#include "Header.h" // To see extern bool rescan;
void foo()
{
rescan = true;
}
// ...