首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

OpenGL 全域變數初始化錯誤:檔案操作代碼必須置於函數內部

     編輯:程式設計綜合問答

將 fopen、fread 等檔案操作直接寫在全域範圍(函數外),編譯報錯:missing storage-class or type specifiers、syntax error。

原因

C/C++ **全域範圍僅允許宣告**(變數定義、函數原型、類別定義),**不允許執行語句**(函數呼叫、迴圈、判斷、賦值運算)。

正確位置

  1. main() 內:程式啟動時一次性讀取紋理遮罩。
  2. 初始化函數:initTexture(),在 glutCreateWindow 後、glutMainLoop 前呼叫。
  3. 靜態區域變數 + Lambda (C++11):延遲初始化。

修正範例

GLubyte Mask[128];

void loadMask() {
    FILE *fp = fopen("mask.bmp", "rb");
    if (!fp) exit(0);
    fseek(fp, -sizeof(Mask), SEEK_END);
    fread(Mask, sizeof(Mask), 1, fp);
    fclose(fp);
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    // ...
    loadMask(); // 在這裡呼叫
    glutMainLoop();
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved