错误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;

09-25 19:03