【发布时间】:2021-08-11 16:07:44
【问题描述】:
我在一个标题中有一个static std::vector 来保存某些行为的报告,但由于某种原因,当我想查阅它时,vector 会被删除。注意:要使此错误起作用,必须将其分成 4 个文件:
Reports.hpp
#ifndef REPORTS_HPP_INCLUDED
#define REPORTS_HPP_INCLUDED
#include <vector>
static std::vector<int> reports;
#endif // REPORTS_HPP_INCLUDED
所以reports是要修改的std::vector。
Modifier.h
#ifndef MODIFIER_H
#define MODIFIER_H
class Modifier
{
public:
Modifier() = default;
void report();
};
#endif // MODIFIER_H
Modifier.cpp
#include "Modifier.h"
#include "Reports.hpp"
#include <iostream>
void Modifier::report(){
//std::cout << "Now reports is at: " << reports.size() << std::endl;
//uncomment the code above if you want to see that reports IS modified.
reports.push_back(0);
}
最后,当代码对我来说毫无意义时:
main.cpp
#include <iostream>
#include "Modifier.h"
#include "Reports.hpp"
int main()
{
Modifier m;
for (size_t i = 0; i < 100; ++i)
m.report();
std::cout << reports.size() << std::endl;
}
(这将打印0,不应该是100吗?)
请注意,如果我通过将成员 report() 放在标题 Modifier.h 中来内联它,它可以正常工作,但不是这样。我也尝试了 3 种不同的编译器,但没有任何变化。
为什么vector reports 在这一切之后是空的?你会怎么解决呢?
【问题讨论】: