"Herdefinisie van 'Kategorie' as 'n ander soort simbool" en konflik met Objc runtime klas name

StackOverflow https://stackoverflow.com/questions/20353408

  •  25-08-2022
  •  | 
  •  

Vra

Ek het 'n klas in Objective-C:

@interface Category : NSObject
{
// ...
}

Alles was goed en Ek het hierdie klas sonder probleme in 3 verskillende projekte gebruik.

Eenkeer het ek besluit om toetsteiken vir een projek te skep.Toe gebeur die vreemde ding:samesteller weier om saam te stel met hierdie fout:

Redefenition of 'Category' as a different kind of symbol

dit het ook daarop gewys runtime.h met

typedef struct objc_category *Category;

Wel, dit is redelik.

Ek kan egter nie verstaan ​​hoekom dit my toegelaat het om hierdie klas voorheen te gebruik nie en wat die verskil is tussen oorspronklike teiken en toetsteiken.Ek het nagegaan Deploy target, iOS SDK, alle makro's, kop paaie, #import <objc/runtime.h> en klasse in beide teikens - dit is amper dieselfde.

Ek wil nie hierdie klas se naam herfaktoreer nie omdat dit in veelvoude projekte gebruik word, so wat kan die rede vir so 'n gedrag wees?

Was dit nuttig?

Oplossing

Jy moet in elk geval die naam van hierdie klas herfaktoreer om sulke botsings in die toekoms te vermy.En dit sal minder pynlik wees om dit vroeër eerder as later te doen.

Dit is waarskynlik dat jy 'n lêer invoer wat invoer <objc/runtime.h> op 'n sekere punt.Soos die kwessie van wat die verskil is tussen die toetsteiken en die gewone teiken, op Xcode werk toets deur die simbole op 'n bondel in te spuit.Daar kan 'n paar verskille in kodestroop en simbole sigbaarheid wees wat hierdie soort fout kan verklaar.

Geen wonder Apple beveel aan om klasse met 2 of 3 letters voor te voeg

Ander wenke

Alhoewel jy moet doen wat @Olotiar in sy antwoord sê, is daar 'n vinnige oplossing.

Gaan na jou projek Bou-instellings, soek vir "Aktiveer modules (C en Objective-C)" en stel die waarde op GEEN.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top