2016-11-03 6 views
0

구조체 my_struct에는 compute()라는 함수 포인터가 있습니다. 다음과 같이 선언됩니다 :구조체 함수 포인터 오류

struct my_struct 
{ 
    double (*compute) (double input); 
} 

별도의 파일에서 다른 하나를 가리킬 수 있도록 해당 구조체를 초기화합니다.

error: expected '=', ',', ';', 'asm', or '__attribute__' before '.' token 

내가 사용했던 배의 구조체의 많은의 데이터 멤버 사용 :

static const struct my_struct data; 
data.compute = ...... 

문제는 상관없이 내가, 내가 data.compute에 대한 다음과 같은 오류를 얻을 수있는 함수 포인터를 설정 무엇 없습니다 '.' 연산자,하지만 난 함수 포인터를 사용한 적이있다. 여기서 다른 뭔가가 필요합니까?

+1

구조체를'const'로 정의 했으므로 표기법으로 작업해야합니다. 초기화 후에 만 ​​초기화 할 수 있습니다. 그러나, 그것은 당신이 받고있는 것과는 다른 오류입니다.마치 '데이터'가 단순한 단어가 아닌 것처럼 행동합니다. 마치 매크로가 이상한 것으로 확장 된 것처럼 보입니다. 구조체 타입이 헤더에 선언 되었습니까? '}'다음에 세미콜론이 있습니다. 그렇죠? –

+0

그래, const 문제가되지 않습니다. 나는 그것을 제거하려고했지만, 오직 같은 오류가 발생합니다. 당신이 말하고있는 마지막 부분을 어떻게 해결할 수 있을지 아십니까? – Bob

+0

코드가 충분하지 않습니다. - MCVE ([MCVE])를 제공하지 않았습니다. 우리는 컴파일 할 수 있고보고있는 오류 (또는 유사한 오류)를 볼 수있는 코드가 없습니다. 헤더와 문제를 보여주는 최소한의 코드 집합이 필요합니다. 함수 안에'data.compute = ... '을 쓰고 있니? (_Hmmm : 나는 아닙니다. 당신은 초기화'... data = {...};'를 사용하거나 함수 내에서 할당을 이동해야합니다.) –

답변

1

구조체를 const으로 정의 했으므로 표기법을 사용해야합니다. 초기화 후에 만 ​​초기화하고 할당 할 수는 없습니다.

그러나 현재와 다른 오류입니다. data이 단순한 단어가 아닌 것처럼 동작합니다. 마치 매크로가 이상한 것으로 확장 된 것처럼 보입니다. 구조체 타입이 헤더에 선언 되었습니까? 그리고} 뒤에 세미콜론이 생깁니다. 그렇지 않습니까?

예, const은 문제가되지 않습니다. 나는 그것을 제거하려고했지만, 오직 같은 오류가 발생합니다. 당신이 말하고있는 마지막 부분을 어떻게 해결할 수 있을지 아십니까? 한 레벨에서

는 충분히 코드가 아니다 - 당신은 MCVE (Minimal, Complete, and Verifiable Example를) 제공 한 적이 없다 - 우리는 우리가 컴파일하고 당신이 보는 (또는 비슷한 것)하고있는 오류를 볼 수있는 코드가 없습니다. 헤더와 문제를 보여주는 최소한의 코드 집합이 필요합니다.

함수 안에 data.compute = …을 작성하고 있습니까? 그렇습니다. (은 흠 : 나는 의심하지 - 당신이 초기화 … data = { … };을 사용하거나 함수 내에서 할당을 이동해야 하나.)

아니, 그것은 함수에서이 아니다. … data = { … }; 좀 더 자세히 설명해 주시겠습니까? 나는 그 구문을 인식하지 못한다; 첫 번째로 은 무엇을 나타 냅니까?

첫 번째 static const struct my_struct입니다. 그러나 나는 복사를 너무 게으른 느낌이었습니다. 그래서, 당신이 필요합니다

static const struct my_struct data = { .compute = sin }; 

또는 이와 유사한 (가정 당신이 sin에 대한 선언을 제공하기 위해 <math.h>을 포함 -하거나 이미 선언 또는 정의한 다른 기능을 사용). C99 또는 이후 컴파일러없이 걸린 경우) :

static const struct my_struct data = { sin }; 

기능 외부에서 할당을 작성할 수 없습니다. 이니셜 라이저를 사용하거나 함수 내에 할당을 작성하고 const을 제거해야합니다.