首先,我看到this question以及this,但我的问题没有在那里解决。
我在自己的头文件中定义了一个协议ClassA
。然后我有两个类ClassB
和ClassA
,它们都符合这个协议,所以协议头被导入它们的头文件。
现在有点复杂了。 ClassC
在第三个ProtocolB
中使用(并因此导入)。该类符合第二个协议ClassB
。该协议也有自己的头文件,使用和导入ClassC
。因此,我的ClassA
导入(直接或间接)ClassB
和ProtocolA
(导入ProtocolA
)。这给了我关于warning: duplicate protocol definition of '…' is ignored
:
#import
为什么会这样?据我所知,#include
宏的发明正是为了避免我们在ProtocolA.h
时遇到的这类问题。如何在不使用包含警卫的情况下解决问题?我无法真正删除任何导入。
编辑:以下是说明情况的代码:
@protocol ProtocolA <NSObject>
- (void)someMethod;
@end
ClassA.h
#import "ProtocolA.h"
@interface ClassA : NSObject <ProtocolA>
...
@end
ClassB.h
#import "ProtocolA.h"
@interface ClassB : NSObject <ProtocolA>
typedef enum Type {
TypeB1,
TypeB2
} TypeB;
...
@end
ProtocolB.h
#import "ClassB.h"
@protocol ProtocolB <NSObject>
- (TypeB)someMethod;
@end
ClassC.h
#import "ProtocolB.h"
@interface ClassC : NSObject <ProtocolB>
...
@end
ClassC.m
#import "ClassC.h"
#import "ClassA.h" // the warning appears here
@implementation ClassC
...
@end
#include <iostream>
using namespace std;
void Print_numm(int numm){
cout<<numm;
if (numm<=4) {
Print_numm(numm+1);
}
cout<<numm;
}
int main() {
Print_numm(1);
return 0;
}
答案 0 :(得分:0)
不要在ClassB
标题中导入ProtocolB
,只需在其中使用@class ClassB;
并移除#import "ClassB"