2016-11-03 21 views
0

struct 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'として定義していますので、これは初期化することしかできず、初期化の後で代入することはできません。しかし、それはあなたが得ているものとは異なるエラーです。あたかも 'data'が単純な単語ではないかのように振る舞います。マクロが奇妙なものに展開されているかのように、あるいはそれらの行に沿って何かに展開されているかのようです。構造体の型はヘッダーで宣言されていますか? '}'の後にセミコロンが付きますか? –

+0

ええ、constは問題ではありません。私はそれを削除しようとしましたが、同じエラーが発生するだけです。あなたが話している最後の部分をどのように解決するか考えていますか? – Bob

+0

コードが不十分です - あなたはMCVE([MCVE])を提供していません - あなたが見ているエラーをコンパイルして見ることができるコードはありません。ヘッダーと問題を示す最小限のコードセットが必要です関数内に 'data.compute = ...'を書いていますか? (_Hmmm:私はそうではないと思われます - あなたは初期化 '... data = {...};'を使うか、関数内で代入を移動する必要があります) –

答えて

1

構造体をconstと定義しているため、これは表記法で動作するはずですが、初期化することはできますが、初期化後には初期化できません。

しかし、それはあなたが得ているものとは異なるエラーです。 dataが単純な単語ではないかのように振る舞います。マクロが奇妙なものに展開されているかのように、またはそれらの行に沿って何かに展開されているかのようです。構造体の型はヘッダーで宣言されていますか?そして、}の後にセミコロンが付いていますか?

ええと、constは問題ありません。私はそれを削除しようとしましたが、同じエラーが発生するだけです。あなたが話している最後の部分をどのように解決するか考えていますか? 1つのレベルで

、十分なコードはありません - あなたは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を削除する必要があります。