错误C2071:“Lexicon::list”:非法存储类
我有一个类,它将一堆字符串读入内存,然后提供允许对这些字符串及其关系进行操作的函数。作为此过程的一部分,我希望在启动一些操作的main.cpp和完成操作的类之间有一个共享内存。为此,在上一篇文章中,建议使用extern类型。但是,现在有一个错误。如何解决此错误并使几个类共享一个内存空间?
在lexicon.h中
#ifndef _lexicon_h
#define _lexicon_h
#include <string>
#include <vector>
using namespace std;
class Lexicon {
public:
Lexicon();
~Lexicon();
extern vector<vector<string>> list;
void buildVectorFromFile(string filename, vector<vector<string>> &list, int v, int h);
private:
struct charT { char letter; nodeT *next;};
};
#endif
在main.cpp中
#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>
#include "lexicon.h"
void buildVectorFromFileHelper (Lexicon & lex)
{
vector<vector<string>> list;
lex.buildVectorFromFile("ASCII.csv", list, 200, 2); //build 2x200 vector list
}
最佳答案
好的,我误解了您的上一个问题(如果您不发布完整的代码,就会发生这种情况)。在类内部,不使用extern
:
在lexicon.h中
#ifndef _lexicon_h
#define _lexicon_h
#include <string>
#include <vector>
using namespace std;
class Lexicon {
public:
Lexicon();
~Lexicon();
vector<vector<string>> list;
private:
struct charT { char letter; nodeT *next;};
};
#endif
在main.cpp中
#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>
#include "lexicon.h"
void buildVectorFromFileHelper (Lexicon & lex)
{
vector<vector<string>> list;
lex.buildVectorFromFile("ASCII.csv", list, 200, 2); //build 2x200 vector list
}
这里的问题是
Lexicon
没有方法buildVectorFromFile
,那么如何调用lex.buildVectorFromFile("ASCII.csv", list, 200, 2);
呢?要共享相同的
vector
(如果是成员),则使其成为static
:class Lexicon {
public:
Lexicon();
~Lexicon();
static vector<vector<string>> list;
private:
struct charT { char letter; nodeT *next;};
};
在
lexicon.cpp
中:vector<vector<string>> Lexicon::list;