GPS Parser Code Fails to Compile

@PeterIldefonso-cp5mq

Unable to use sample code. The GPS Parser code has several error when compiled. Using Arduino R4, with IDE
Version: 2.3.7
Date: 2025-12-17T16:05:25.389Z
CLI Version: 1.3.1

Output from Sketch compilation below:

C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.cpp: In function ‘GPSData parse_gps_data(arduino::String)’:
C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.cpp:108:43: error: ‘GPSData GPSReader::_process_nmea_data(arduino::String)’ is private within this context
return tmp._process_nmea_data(nmea_chunk);
^
In file included from C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.cpp:2:0:
C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.h:50:13: note: declared private here
GPSData _process_nmea_data(String nmea_data);
^~~~~~~~~~~~~~~~~~
C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.cpp: In member function ‘GPSData GPSReader::_process_nmea_data(arduino::String)’:
C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.cpp:125:30: error: no match for ‘operator=’ (operand types are ‘arduino::String’ and ‘void’)
sentence = sentence.trim();
^
In file included from C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/IPAddress.h:24:0,
from C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/ArduinoAPI.h:30,
from C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/Arduino.h:4,
from C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.h:8,
from C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.cpp:2:
C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/String.h:97:11: note: candidate: arduino::String& arduino::String::operator=(const arduino::String&)
String & operator = (const String &rhs);
^~~~~~~~
C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/String.h:97:11: note: no known conversion for argument 1 from ‘void’ to ‘const arduino::String&’
C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/String.h:98:11: note: candidate: arduino::String& arduino::String::operator=(const char*)
String & operator = (const char cstr);
^~~~~~~~
C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/String.h:98:11: note: no known conversion for argument 1 from ‘void’ to 'const char

C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/String.h:99:11: note: candidate: arduino::String& arduino::String::operator=(const arduino::__FlashStringHelper*)
String & operator = (const __FlashStringHelper str);
^~~~~~~~
C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/String.h:99:11: note: no known conversion for argument 1 from ‘void’ to 'const arduino::__FlashStringHelper

C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/String.h:100:11: note: candidate: arduino::String& arduino::String::operator=(arduino::String&&)
String & operator = (String &&rval);
^~~~~~~~
C:\Users\dadon\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.5.1\cores\arduino/api/String.h:100:11: note: no known conversion for argument 1 from ‘void’ to ‘arduino::String&&’
exit status 1

Compilation error: exit status 1

1 Like

Hey @Peter311263 , welcome to the forums!

That error message you are getting looks like it should be an easy fix. To fix it you should just be able to change the private method to public in the code.

Open the ‘GPSParser.h’ file, which should be located at C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.h

Locate the class definition section in this file, which should look something like this:

private:
GPSData _process_nmea_data(String nmea_data);

and change it so that the method is public:

public:
GPSData _process_nmea_data(String nmea_data);

Hopefully, everything works as expected after this! Let us know if you have any more issues. :slight_smile:

1 Like

Still getting errors:

Moved declaration of process_nmea_data(string nmea_data); down to public section of declarations.

But still does not seem to recognize String class.

C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.cpp:125:30: error: no match for ‘operator=’ (operand types are ‘arduino::String’ and ‘void’)
sentence = sentence.trim();
^

1 Like

Hopefully, that one is an easy fix as well. If you change that line in C:\Users\dadon\OneDrive\Documents\Arduino\libraries\GPSParser\GPSParser.cpp from:

sentence = sentence.trim();

to just

sentence.trim();

Does that improve anything? That should stop this particular error of sentence being set to ‘void’ instead of a string as expected.

1 Like

Huzzah! Lat/long/etc are being printed in the serial monitor. Thanks for all the help. On to the next opportunity.

3 Likes