Maker_LED_Matrix_64 compilation errors with IS31FL3731 constructor

Customer:

I have a Maker Display 4 and can program it using the tutorial libraries. There are two additional libraries: Maker_LED_Matrix_32 and Maker_LED_Matrix_64. They seem to have similar functionality to the Maker_LED_Matrix library, but work with an external Adafruit GFX library instead of containing the GFX source files. Since I already have this library installed, I would prefer to use one of the _32 or _64 libraries, but I get lots of compilation errors. The GFX library and the IS31FL3731 library are present. What is the actual difference between the _32 and _64 variants and what could cause the compiler errors?

Errors from the first example of the _64 library:

D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:11:34: error: no matching function for call to 'IS31FL3731::IS31FL3731()'
 IS31FL3731 matrixLL = IS31FL3731(); //LED Matrix IC on the left side of board.
 ^
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:11:34: note: candidates are:
 In file included from D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:5:0:
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:32:4: note: IS31FL3731::IS31FL3731(uint8_t)
 IS31FL3731(uint8_t n);
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:32:4: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: constexpr IS31FL3731::IS31FL3731(const IS31FL3731&)
 class IS31FL3731 : public Adafruit_GFX {
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: constexpr IS31FL3731::IS31FL3731(IS31FL3731&&)
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:12:34: error: no matching function for call to 'IS31FL3731::IS31FL3731()'
 IS31FL3731 matrixLR = IS31FL3731(); //LED Matrix IC on the right side of board.
 ^
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:12:34: note: candidates are:
 In file included from D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:5:0:
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:32:4: note: IS31FL3731::IS31FL3731(uint8_t)
 IS31FL3731(uint8_t n);
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:32:4: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: constexpr IS31FL3731::IS31FL3731(const IS31FL3731&)
 class IS31FL3731 : public Adafruit_GFX {
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: constexpr IS31FL3731::IS31FL3731(IS31FL3731&&)
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:13:34: error: no matching function for call to 'IS31FL3731::IS31FL3731()'
 IS31FL3731 matrixRL = IS31FL3731(); //LED Matrix IC on the left side of board.
 ^
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:13:34: note: candidates are:
 In file included from D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:5:0:
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:32:4: note: IS31FL3731::IS31FL3731(uint8_t)
 IS31FL3731(uint8_t n);
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:32:4: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: constexpr IS31FL3731::IS31FL3731(const IS31FL3731&)
 class IS31FL3731 : public Adafruit_GFX {
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: constexpr IS31FL3731::IS31FL3731(IS31FL3731&&)
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:14:34: error: no matching function for call to 'IS31FL3731::IS31FL3731()'
 IS31FL3731 matrixRR = IS31FL3731(); //LED Matrix IC on the right side of board.
 ^
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:14:34: note: candidates are:
 In file included from D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:5:0:
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:32:4: note: IS31FL3731::IS31FL3731(uint8_t)
 IS31FL3731(uint8_t n);
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:32:4: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: constexpr IS31FL3731::IS31FL3731(const IS31FL3731&)
 class IS31FL3731 : public Adafruit_GFX {
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: candidate expects 1 argument, 0 provided
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:27:7: note: constexpr IS31FL3731::IS31FL3731(IS31FL3731&&)
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp: In member function 'int Maker_LED_Matrix_64::initLEDMatrix()':
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:153:27: error: no matching function for call to 'IS31FL3731::begin(int)'
 if (!matrixLL.begin(0x74)) return 0; //Initalize library for left LED matrix driver.
 ^
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:153:27: note: candidate is:
 In file included from D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:5:0:
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:33:12: note: boolean IS31FL3731::begin()
 boolean begin();
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:33:12: note: candidate expects 0 arguments, 1 provided
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:154:27: error: no matching function for call to 'IS31FL3731::begin(int)'
 if (!matrixLR.begin(0x77)) return 0; //Initalize library for right LED matrix driver.
 ^
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:154:27: note: candidate is:
 In file included from D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:5:0:
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:33:12: note: boolean IS31FL3731::begin()
 boolean begin();
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:33:12: note: candidate expects 0 arguments, 1 provided
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:155:27: error: no matching function for call to 'IS31FL3731::begin(int)'
 if (!matrixRL.begin(0x75)) return 0; //Initalize library for left LED matrix driver. [SECOND BOARD]
 ^
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:155:27: note: candidate is:
 In file included from D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:5:0:
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:33:12: note: boolean IS31FL3731::begin()
 boolean begin();
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:33:12: note: candidate expects 0 arguments, 1 provided
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:156:27: error: no matching function for call to 'IS31FL3731::begin(int)'
 if (!matrixRR.begin(0x76)) return 0; //Initalize library for right LED matrix driver. [SECOND BOARD]
 ^
 D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:156:27: note: candidate is:
 In file included from D:\EigeneDateien\Arduino\libraries\Maker_LED_Matrix_64\Maker_LED_Matrix_64.cpp:5:0:
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:33:12: note: boolean IS31FL3731::begin()
 boolean begin();
 ^
 D:\EigeneDateien\Arduino\libraries\IS31FL3731/IS31FL3731.h:33:12: note: candidate expects 0 arguments, 1 provided
 Mehrere Bibliotheken wurden für "Adafruit_GFX.h" gefunden
 Benutzt: D:\EigeneDateien\Arduino\libraries\Adafruit_GFX_Library
 Nicht benutzt: D:\EigeneDateien\Arduino\libraries\Maker-Display-Arduino-Library
 exit status 1
 Fehler beim Kompilieren für das Board Generic ESP8266 Module.

Originally submitted via email support on 24 August 2019. Migrated to the forum for community visibility.

Soldered Support:

The Maker_LED_Matrix_32 and Maker_LED_Matrix_64 libraries are the old ones—they were created first. They use the old IS31FL3731 library. The new Maker Display library uses the new IS31FL3731 library. The new version of IS31FL3731 is not the same as the old one. We made optimizations to the Adafruit IS31FL3731 to achieve a faster refresh rate by connecting the drivers together. These are the differences. If you switch between the old and new Maker Display libraries, you need to change the IS31FL3731 library accordingly.

Also, the old Maker Display library does not allow you to use the print function of Adafruit GFX and some other functions. With the new library, you can use all Adafruit GFX functions. We recommend the new library, as described in the tutorial.

Customer:

I did not know that the _32 and _64 libraries were the old ones. In my opinion it does not make sense to try those, since the development goes in another direction. I will stay with the new libraries, since they work anyway.

The Arduino IDE prefers the Adafruit GFX from your library and ignores the original one, and the compiled program works.

Soldered Support:

We 100% agree with you. The compiler first tries to find a local .h file, and if there is none, it looks further. Since there is one in the same folder as the Maker Display library, that one is used.

We are aware that documentation is the weak point and we should work to make it better and more clear—we will continue to work on that.