在多文件項目中,average_analysis 函數聲明在 average_analysis.h,定義在 average_analysis.cpp,調用處報錯「標識符無法定義」。經排查,是頭文件守衛宏名拼寫不一致導致重複包含或未包含。
// average_analysis.h
#ifndef GURAD_average_analysis // 拼寫錯誤:GURAD
#define GURAD_average_analysis
// ... 函數聲明
#endif
// average_grade.h
#ifndef GUARD_average_grade
#define GUARD_average_grade
#include "average_analysis.h" // 這裡引用
// ... 調用 average_analysis
#endif
average_analysis.h 的守衛宏寫成 GURAD_...(少了 I)。average_analysis.h 且使用正確拼寫 GUARD_...,會導致頭文件被重複處理,或因宏不匹配而未生效。PROJECT_AVERAGE_ANALYSIS_H。#pragma once(現代編譯器普遍支持)替代傳統宏守衛,簡潔且避免拼寫錯誤。// average_analysis.h
#pragma once
// 或 #ifndef PROJECT_AVERAGE_ANALYSIS_H
// #define PROJECT_AVERAGE_ANALYSIS_H
// 函數聲明
double average_analysis(const Student_info& s);
double average_analysis(const vector<Student_info>& students);
// average_grade.h
#pragma once
#include "average_analysis.h"
// 正常使用
#pragma once,除非需兼容極舊編譯器。_PROJECT_MODULE_FILE_H,全大寫,避免保留字衝突。