Question

I'm trying to implement the USBPrivateDataSample in my cocoa project. The problem is when I'm trying to allocate memory for the struct MyPrivateData I get the error

"Assining to "MyPrivateData *" from incombatible type 'void *'"

I have the struct definition in my header file:

#define kMyVendorID     0x0403
#define kMyProductID    0x6001

class RtMidiOut;

typedef struct MyPrivateData {
    io_object_t             notification;
    IOUSBDeviceInterface    **deviceInterface;
    CFStringRef             deviceName;
    UInt32                  locationID;
} MyPrivateData;

static IONotificationPortRef    gNotifyPort;
static io_iterator_t            gAddedIter;
static CFRunLoopRef             gRunLoop;


@interface serialInput : NSObject{

...

And I'm calling in my .mm file:

void DeviceAdded(void *refCon, io_iterator_t iterator){
    kern_return_t       kr;
    io_service_t        usbDevice;
    IOCFPlugInInterface **plugInInterface = NULL;
    SInt32              score;
    HRESULT             res;

    while ((usbDevice = IOIteratorNext(iterator))) {
        io_name_t       deviceName;
        CFStringRef     deviceNameAsCFString;   
        MyPrivateData   *privateDataRef;
        UInt32          locationID;

        printf("Device added.\n");

        // Add some app-specific information about this device.
        // Create a buffer to hold the data.

        privateDataRef = malloc(sizeof(MyPrivateData));  //The error!

        bzero(privateDataRef, sizeof(MyPrivateData));

Any useful advice?

Was it helpful?

Solution

The suffix mm means you are using C++ code and Objective-C code. Although Objective-C is a superset op C, the compiler will allow it. But you have to keep in mind that C++ is not a superset of C. The same rules don't apply.

While C allows you to do implicit casts from void * to an other data type, C++ requires you to do an explicit cast.

E.g.:

char *a;
void *b;

a = b; // allowed in C, not in C++
a = (char *)b; // allowed in C, required in C++
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top