이전 스타일 함수 선언은 말을하는 것입니다 그 C에서 사용되지 않습니다, C에서,
void MenuItemAFunction();
수단 MenuItemAFunction
인수 또는 알 수없는 유형의 알 수없는 번호를 취하는 아무 것도 반환하지 않습니다 기능이 있지만, 선언문은 인수 목록에 대해서는 거의 언급하지 않는다.
인수가없는 함수를 선언하는 적절한 방법은 다음과 같습니다
void MenuItemAFunction(void);
사이드 참고 : C++,이 다릅니다. ()
구문은 인수가없는 함수를 멋지게 선언합니다. Bjarne Stroustrup은 C++가 된 "C와 함께"작업 할 때 고문의 말을 들었습니다. 데니스 리치 (Dennis Ritchie)는 (void)
을 "가증함"이라고 불렀다. 그래서 Stroustrup은 확실한 의미를 갖도록 ()
을 만들 것을 확신했습니다.
따라서 사용되지 않는 사용법과 관련된 진단을 받고있을 수 있습니다. 그 문제를 해결하십시오. 다시 시도하십시오. 이러한 두 변형이 작동한다 (예컨대 함수 이름 식별자로 구성되는 기본 함수와 같은) 함수를 나타내고, 식 이미로 평가되므로
struct MenuItem MenuItemA = {textA, MenuItemAFunction, &MenuItemB, 0};
struct MenuItem MenuItemA = {textA, &MenuItemAFunction, &MenuItemB, 0};
&
어드레스의 오퍼레이터가 필요없는 주소 연산자가없는 포인터.
해당 함수의 주소를 사용하려는 경우 함수 호출을 표현하고 싶지 않습니다. 함수에 대한 포인터가 해당 표현식에서 나오게하려면 MenuItemAFunction()
주위에 구문 조합을 사용할 수 없습니다.
귀하의 남은 "정의되지 않은 참조"오류는 단지 이을 정의하는 기능 MenuItemAFunction
하지 을 선언 한 사실에서 유래한다. 존재하지 않는 함수의 주소를 가져올 수 없습니다. 아마 당신의 프로젝트 (Makefile, IDE, ...)가 잘못 설정되어 있고 그 함수의 정의가 들어있는 소스 파일에서 컴파일하고 링크하지 않을 수도 있습니다.
출처
2014-04-05 18:48:07
Kaz
마지막으로받은 오류는 무엇입니까? 가장 정확한 것 같습니다. 일반적으로 오류 메시지를 포함하면 사람들이 귀하를 도울 수 있습니다. – fmoo
'fmoo'처럼, 마지막은 당신이 필요로하는 옷장이라고 생각합니다. 그러나 마지막 연산자의 주소는 필요 없습니다. struct MenuItem MenuItemA = {textA, & MenuItemAFunction, MenuItemB, 0};'. 컴파일러 오류로 알려줍니다. – jww
함수 포인터 선언을 확인하는 가장 쉬운 방법은'MenuItemFunctionPtr pfn = & MenuItemAFunction;'시도하는 것입니다. 괜찮 으면 문제는 다른'struct' 멤버 (또는 다른 곳)에 있습니다. – jww