***SOLVED*** Wire.h contains many errors

I'm trying to compile a simple sketch using the 16x2 I2C. Problem is, I'm getting esoteric error messages in Wire.h, which is included by way of <LiquidCrystal_I2C.h>. I have not downloaded nor messed with that library. It is one of those things that worked fine in 1.8.6 and not working in 1.8.8. As it is, I'll have to proceed without an LCD for time being.

By the way, this is not a common problem. People always are having issues with Wire.h or it's dependencies not being present, not syntax errors.

Now I'm a little stressed out. I went to github and downloaded Wire.h, Wire.cpp, then twi.h, and now I'm still getting undeclared errors. Why post code that won't compile? I must have something set wrong with IDE...

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:45:36: error: conflicting declaration 'void (* TwoWire::user_onReceive)(int)'

 void (*TwoWire::user_onReceive)(int);

                                    ^

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:30:0:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:25:19: note: previous declaration as 'void (* TwoWire::user_onReceive)(size_t)'

     static void (*user_onReceive)(size_t);

                   ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:79:23: error: no 'void TwoWire::end()' member function declared in class 'TwoWire'

 void TwoWire::end(void)

                       ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:89:9: error: prototype for 'uint8_t TwoWire::requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t)' does not match any in class 'TwoWire'

 uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint32_t iaddress, uint8_t isize, uint8_t sendStop)

         ^

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:30:0:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:48:13: error: candidates are: uint8_t TwoWire::requestFrom(int, int, int)

     uint8_t requestFrom(int, int, int);

             ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:47:13: error:                 uint8_t TwoWire::requestFrom(int, int)

     uint8_t requestFrom(int, int);

             ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:46:13: error:                 uint8_t TwoWire::requestFrom(uint8_t, uint8_t, uint8_t)

     uint8_t requestFrom(uint8_t, uint8_t, uint8_t);

             ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:45:13: error:                 uint8_t TwoWire::requestFrom(uint8_t, uint8_t)

     uint8_t requestFrom(uint8_t, uint8_t);

             ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:42:12: error:                 size_t TwoWire::requestFrom(uint8_t, size_t, bool)

     size_t requestFrom(uint8_t address, size_t size, bool sendStop);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp: In member function 'uint8_t TwoWire::requestFrom(uint8_t, uint8_t, uint8_t)':

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:123:100: error: no matching function for call to 'TwoWire::requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t)'

  return requestFrom((uint8_t)address, (uint8_t)quantity, (uint32_t)0, (uint8_t)0, (uint8_t)sendStop);

                                                                                                    ^

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:30:0:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:42:12: note: candidate: size_t TwoWire::requestFrom(uint8_t, size_t, bool)

     size_t requestFrom(uint8_t address, size_t size, bool sendStop);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:42:12: note:   candidate expects 3 arguments, 5 provided

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:45:13: note: candidate: uint8_t TwoWire::requestFrom(uint8_t, uint8_t)

     uint8_t requestFrom(uint8_t, uint8_t);

             ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:45:13: note:   candidate expects 2 arguments, 5 provided

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:122:9: note: candidate: uint8_t TwoWire::requestFrom(uint8_t, uint8_t, uint8_t)

 uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) {

         ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:122:9: note:   candidate expects 3 arguments, 5 provided

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:30:0:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:47:13: note: candidate: uint8_t TwoWire::requestFrom(int, int)

     uint8_t requestFrom(int, int);

             ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:47:13: note:   candidate expects 2 arguments, 5 provided

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:48:13: note: candidate: uint8_t TwoWire::requestFrom(int, int, int)

     uint8_t requestFrom(int, int, int);

             ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:48:13: note:   candidate expects 3 arguments, 5 provided

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp: At global scope:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:277:6: error: prototype for 'void TwoWire::onReceiveService(uint8_t*, int)' does not match any in class 'TwoWire'

 void TwoWire::onReceiveService(uint8_t* inBytes, int numBytes)

      ^

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:30:0:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:27:17: error: candidate is: static void TwoWire::onReceiveService(uint8_t*, size_t)

     static void onReceiveService(uint8_t*, size_t);

                 ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:317:6: error: prototype for 'void TwoWire::onReceive(void (*)(int))' does not match any in class 'TwoWire'

 void TwoWire::onReceive( void (*function)(int) )

      ^

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.cpp:30:0:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\Wire.h:56:10: error: candidate is: void TwoWire::onReceive(void (*)(size_t))

     void onReceive( void (*)(size_t) );

Have a look here, maybe this answer can help you:

Thanks to some guy here on StackOverFlow, I have understood that in case of missmatching between the virtual function prototype and the overridden version of that function in the derived class, the compiler complain.

SOLUTION: in Print.h, at line 48, I have deleted = 0 from:

virtual size_t write(uint8_t) = 0;

virtual size_t write(uint8_t);

It's late and over my head at the moment. Let me sleep on that. Thanks. I was thinking problem was more unique to me as the Wire.h is so widly disseminated. Furthermore, no one has this problem of errors showing up in Wire.h. I searched.

I don't see how we can do anything but guess what the problem might be till you post the code that caused those errors.

groundFungus:
I don't see how we can do anything but guess what the problem might be till you post the code that caused those errors.

Which code. My code was include <liquidCrystal_I2c.h> and that's it. It occurs wherever that library is included, likely with includes of Wire.h too.

The error now is simply: error: 'optimistic_yield' was not declared in this scope, scope being: member function 'virtual int TwoWire::available()':.

My sketch is rather dependent on a LCD display so yeah... umm, this only started with 1.8.8.

Here is that code, as-is from github

#ifndef TwoWire_h
#define TwoWire_h

#include <inttypes.h>
#include "Stream.h"



#define BUFFER_LENGTH 128

class TwoWire : public Stream
{
  private:
    static uint8_t rxBuffer[];
    static uint8_t rxBufferIndex;
    static uint8_t rxBufferLength;

    static uint8_t txAddress;
    static uint8_t txBuffer[];
    static uint8_t txBufferIndex;
    static uint8_t txBufferLength;

    static uint8_t transmitting;
    static void (*user_onRequest)(void);
    static void (*user_onReceive)(size_t);
    static void onRequestService(void);
    static void onReceiveService(uint8_t*, size_t);
  public:
    TwoWire();
    void begin(int sda, int scl);
    void begin(int sda, int scl, uint8_t address);    
    void pins(int sda, int scl) __attribute__((deprecated)); // use begin(sda, scl) in new code
    void begin();
    void begin(uint8_t);
    void begin(int);
    void setClock(uint32_t);
    void setClockStretchLimit(uint32_t);
    void beginTransmission(uint8_t);
    void beginTransmission(int);
    uint8_t endTransmission(void);
    uint8_t endTransmission(uint8_t);
    size_t requestFrom(uint8_t address, size_t size, bool sendStop);
	uint8_t status();

    uint8_t requestFrom(uint8_t, uint8_t);
    uint8_t requestFrom(uint8_t, uint8_t, uint8_t);
    uint8_t requestFrom(int, int);
    uint8_t requestFrom(int, int, int);
    
    virtual size_t write(uint8_t);
    virtual size_t write(const uint8_t *, size_t);
    virtual int available(void);
    virtual int read(void);
    virtual int peek(void);
    virtual void flush(void);
    void onReceive( void (*)(size_t) );
    void onRequest( void (*)(void) );

    inline size_t write(unsigned long n) { return write((uint8_t)n); }
    inline size_t write(long n) { return write((uint8_t)n); }
    inline size_t write(unsigned int n) { return write((uint8_t)n); }
    inline size_t write(int n) { return write((uint8_t)n); }
    using Print::write;
};

#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_TWOWIRE)
extern TwoWire Wire;
#endif

#endif

SOLVED Anyhow - I made the correction that error pointed out, optimistic_yeild wasn't declared in cpp nor in in class TwoWire. Compiles finally.