2014-02-27 56 views
1

我想構建別人的C++項目 - 我使用的代碼從here。這是該項目的發佈,所以我認爲它應該是按原樣工作的。但是,在編譯時,我得到這個錯誤。我已經嘗試將__gammaTable移動到gamma()函數中,但我不確定爲什麼這不在其範圍內。編譯錯誤建設arduino項目:變量未在此範圍內聲明

src/gamma.cpp:15:9: error: 'prog_uchar' does not name a type 
PROGMEM prog_uchar __gammaTable[] = { 
     ^
In file included from /usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h:8:0, 
       from src/gamma.h:4, 
       from src/gamma.cpp:13: 
src/gamma.cpp: In function 'byte gamma(byte)': 
src/gamma.cpp:42:27: error: '__gammaTable' was not declared in this scope 
    return pgm_read_byte(&__gammaTable[x*2 + 2]); 
         ^
.build/lilypad328/Makefile:339: recipe for target '.build/lilypad328/src/gamma.o' failed 
make: *** [.build/lilypad328/src/gamma.o] Error 1 
Make failed with code 2 

和這裏的代碼跳閘錯誤:

#include "gamma.h" 

PROGMEM prog_uchar __gammaTable[] = { 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 
    2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 
    4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 
    7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 
    11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16, 
    16, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 21, 21, 21, 22, 22, 
    23, 23, 24, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 
    30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 37, 37, 38, 38, 39, 
    40, 40, 41, 41, 42, 43, 43, 44, 45, 45, 46, 47, 47, 48, 49, 50, 
    50, 51, 52, 52, 53, 54, 55, 55, 56, 57, 58, 58, 59, 60, 61, 62, 
    62, 63, 64, 65, 66, 67, 67, 68, 69, 70, 71, 72, 73, 74, 74, 75, 
    76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 
    92, 93, 94, 95, 96, 97, 98, 99,100,101,102,104,105,106,107,108, 
    109,110,111,113,114,115,116,117,118,120,121,122,123,125,126,127 
}; 

byte gamma(byte x) { 
    return pgm_read_byte(&__gammaTable[x*2 + 2]); 
} 
+1

看起來你缺少任何系統頭文件定義'pro_uchar'類型。 –

回答

1

快速修復是將「prog_uchar」更改爲「uchar」。它看起來像表中包含範圍(0,255)中的整數,而「prog_uchar」應該表示「uchar」。

但修復它的正確方法是找到「prog_uchar」被定義的位置,以及#include該文件。

+0

根據這個github問題,prog_uchar已被棄用 - 我目前的arduino版本一定不能擁有它。 https://github.com/adafruit/Adafruit-ST7735-Library/issues/10 – kelorek

+0

只是換出s/prog_uchar/uchar似乎並不奏效 - 我得到了'src/gamma.cpp:15:9:error :'uchar'不命名一個類型 PROGMEM uchar __gammaTable [] = ...' – kelorek

+0

嘗試只是「char」而不是「prog_uchar」。該表中沒有127以上的數字,因此char是有符號還是無符號(「uchar」中的'u')應該沒有區別。 – Abednego

1

你實際的錯誤是這樣的:

src/gamma.cpp:15:9: error: 'prog_uchar' does not name a type

你可能會丟失,其中包括prog_uchar頭文件:

#include <avr/pgmspace.h> 

此錯誤:

src/gamma.cpp:42:27: error: '__gammaTable' was not declared in this scope return pgm_read_byte(&__gammaTable[x*2 + 2]);

只是來自於一個事實,由於prog_uchar丟失,變量__gammaTable未正確申報。