1

エラー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
    }
4

2 に答える 2

2

わかりました、私はあなたの前の質問を誤解しました(これはあなたが完全なコードを投稿しないときに起こることです)。クラス内で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;
于 2012-07-25T22:06:00.650 に答える
0

外部メモリのルールは、このdaniwebスレッドで説明されています。はい、これは単純なはずですが、どういうわけか直感的ではないというコメントがあります。要点は、メモリが.cppファイルAでexternプレフィックスを使用してグローバルに宣言され、次にcpp Bでメモリを再利用するために、.cppファイルBで再度グローバルに宣言することです。

Luchian_Grigoreと@jahhajはそこに到達していたと思いますが、私が理解できる単語が見つからなかったか、説明する単語がまだ見つかっていました。

于 2012-07-25T22:49:35.543 に答える