int a[500], e[500];
// ... 後續對 a[p] 操作報錯
// error: no match for 'operator[]' (operand types are 'QCoreApplication' and 'int')
在 main 函數第一行聲明了 QCoreApplication a(argc, argv);,導致局部變數 a 遮蔽了全域/外層作用域的數組 int a[500]。編譯器將 a 識別為 QCoreApplication 物件,而該類別未重載 operator[],故報錯。
QCoreApplication app(argc, argv); 或 qtApp。main 內部或使用靜態/動態分配,避免與區域變數同名。int b=1、double c=0 等簡短變數名極易衝突,建議採用有意義命名(如 pixelCount、radius)。int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv); // 重命名
int a[500], e[500]; // 現在 a 明確指向數組
// ... 其餘邏輯
return app.exec();
}
C++ 作用域規則導致內層同名變數遮蔽外層聲明,編譯器不會報錯但會產生邏輯錯誤。養成「變數名見名知意、避免單字母命名」的習慣可有效預防此類問題。