2012-10-25 9 views
0

내가 OOP C에서 응용 프로그램에 다음에 노력하고있어하지만 난 내 new.h 파일의 오류를 얻을.예상치 못한 *, 예상치 못한 (

나는 "예기치 않은"오류의 무리를 얻고있다. 그냥 그 후의 모든 사항에 대해 첫 번째 '무효'는 exepected된다. 에게 어떤 아이디어?

#ifndef NEW_H 
#define NEW_H 

#ifdef __cplusplus 
extern "C" { 
#endif 

void * new (const void * type); 
void delete (void * item); 


#ifdef __cplusplus 
} 
#endif 



#endif /* NEW_H */ 

enter image description here

+3

C 용으로 컴파일 하시겠습니까? 'new'와'delete'는 C++ 키워드이며, 바코드처럼 보입니다. – Mysticial

+0

'new'와'delete' 연산자를 구현하려고합니까? 그렇다면'operator' 키워드를 추가해야합니다. –

+2

정확히 OOP C는 무엇입니까? C는 객체 지향적이지 않습니다. – fayyazkl

답변

0

new의 기능을 C에 시뮬레이트하려는 경우 C++ 인 경우 실제로는 잘못된 인수 인 new이 제공됩니다. 새가

int *p; 
p=new (sizeof(int)); 

로 C++에서 사용하지만, 여기에 그것이 괜찮 intdelete를 들어

const void *에 변환 할 수없는 유형 불일치 때문에 delete이 인수

pointer이 걸리기 때문에 는 const unsigned int 또는 const size_t 해야한다
+0

여기에 문제는 C 코드와 gcc – fayyazkl

+1

을 사용하여 새로운 함수 이름으로 컴파일된다. 어떻게 든 컴파일러는 새로운 키워드에 대해서만 알고있다. 오류가 발생한다. 내장 된 IDE 나 별도의 컴파일러와 편집기를 사용하고있다. – Omkant

+0

내 경우 리눅스 gcc-4.5에서 어떤 오류도 내지 않고있다. – Omkant

1

그럼 당신은 C로 컴파일하고 있지만 newdelete 사업자 만 지원됩니다 C++에서.

또한, newdelete에 대한 서명은 다음과 같습니다 당신은 또한 (클래스 내에 그들을 선언) 특정 클래스에 대한 이러한 연산자를 오버로드 할 수

void* operator new(size_t n); 
void operator delete(void* p); 

.

+0

나는 그 반대가 사실이라고 생각한다. – glglgl

+0

이 예에서 new 및 delete는 새로운 메소드로 정의됩니다. –

+0

또한'new' 배열과'new' 배열이 있습니다. 'new'에는 여러 가지 변형이 있습니다. –

1

new 및 delete는 유효한 함수 이름이 아닌 C++의 키워드입니다.

C를 컴파일한다고 생각하는 경우에도 수정했는지 테스트하십시오. 그렇지 않다면 고전적인 C/C++ 오류 일 수 있습니다. 문제는 이전에에 포함되어 있습니다. 세미콜론 등이 누락되었을 수 있습니다.

+0

이것은 C++ 프로그램이 아닌 c 프로그램입니다. –

+0

파일 확장자가 .c입니까? C 컴파일러 나 C++ 컴파일러로 이것을 컴파일하고 있습니까? – fayyazkl

+0

@fayyazkl 예 .c 파일입니다. 나는 gcc를 사용해 컴파일하려고한다. –

2

이것은 C++에서 유효하지 않은 소수의 C 프로그램 중 하나 인 것 같습니다. 식별자 newdelete은 C에서 완전하게 유효하지만 C++에서 예약됩니다.