私はC++を初めて使い、すべてのソースファイルにアクセスできるマップを作成しようとしています。ここに問題のあるコードの簡略化されたバージョンがあります。すべてのヘッダーファイルにヘッダーガードがありますが、ここでは入力しませんでした。グローバルデータ構造にアクセスする
// main.cpp
#include "client.hpp"
int main(void){
init();
search();
}
// util.cpp
#include "util.hpp"
std::map<int, STUDENT_TYPE> dataBase;
init(){
dataBase[0] = STUDENT_TYPE(14, 4.0);
// more students....
}
// util.hpp
#include <map>
struct STUDENT_TYPE{
int age;
int grade;
STUDENT_TYPE(int age, int grade) : age(age), grade(grade){}
};
extern std::map<int, STUDENT_TYPE> dataBase;
// client.cpp
#include "client.hpp"
void search(){
std::cout << dataBase[0].grade << std::endl;
}
// client.hpp
#include "util.hpp"
void search();
問題は、コンパイラが検索機能でビルドできなかったことです。それは大きなエラーの連鎖を与えます。最後のエラーまたはすべてのエラーの原因は、STUDENT_TYPEのコンストラクタに2つのフィールドが必要な場合です。クライアントがdataBase内のSTUDENT_TYPE構造体にアクセスできないと思われます。私はそれをどうやって修正するか、それがどうなったか正確には分かりません。私は、プログラムのすべてのファイルにアクセスできる大きな生徒のテーブルが必要なだけです。
ありがとうございました。最初の解決策が働いた!私はmap :: findをよく知っているわけではなく、もっと研究が必要です。再度、感謝します。 –