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

时间:2018-07-09 14:50:39

标签: c++ visual-studio global-variables header-files member

我有两个文件,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;

但是我收到“语法错误:'公开'

1 个答案:

答案 0 :(得分:0)

如果您想在其他翻译单元(TU)(其他文件)中显示全局变量,则必须在其他TU中将它们声明为extern

Header.h:

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

file.cpp

#include "Header.h"

bool rescan = false; // Definition

// ...

file2.cpp

#include "Header.h" // To see extern bool rescan;

void foo()
{
    rescan = true;
}
// ...