Определение статического члена в target -C и target -C++

У меня есть разница при компиляции исходного кода -c и исходного кода -c++.

Здесь объявление Class1 и Class2 в test.h:

#import <Foundation/Foundation.h>

@interface Class1 {
}
@end

@interface Class2 {
}
@end

Теперь это цель -C-реализация в test.m:

#import "test.h"

@implementation Class1
/* static member */
static int mystatic;
@end


@implementation Class2
/* static member */
static int mystatic;
@end

Я успешно компилирую с помощью этой команды:

gcc -arch armv6 -isysroot /Developer/.../iPhoneOS5.0.sdk -x objective-c -c test.m

Теперь я использую именно эту цель -Реализация C++ test.mm (точно такой же источник):

#import "test.h"

@implementation Class1
/* static member */
static int mystatic;
@end


@implementation Class2
/* static member */
static int mystatic;
@end

И скомпилировать с этой командной строкой (разница в -х опция):

gcc -arch armv6 -isysroot /Developer/.../iPhoneOS5.0.sdk -x objective-c++ -c test.mm

Но получаю ошибку:

test.mm:11 error: redefinition if 'int mystatic'

Почему я получаю эту ошибку в ObjC++, а не в ObjC?

6
задан dasblinkenlight 5 July 2012 в 14:36
поделиться