gpt4 book ai didi

c++ - C2071 非法存储类,类中声明的外部 vector 在其他类中使用

转载 作者:行者123 更新时间:2023-11-30 04:26:16 25 4
gpt4 key购买 nike

error C2071: 'Lexicon::list': 非法存储类

我有一个类可以将一堆字符串读入内存,然后提供允许对这些字符串及其关系应用操作的函数。作为其中的一部分,我希望在启动某些操作的 main.cpp 和完成操作的类之间有一个共享内存。为此,在之前的帖子中,建议使用外部类型。但是,现在出现了错误。如何解决此错误并让多个类共享内存空间?

在 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;

关于c++ - C2071 非法存储类,类中声明的外部 vector 在其他类中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com