- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:typedef定義型を使った関数について)
typedef定義型を使った関数について
このQ&Aのポイント
- Visual C++ 2008 Express Editionを使ってC言語のソースコードを記述しています。ビルドを行った際にエラーが発生し、解決方法がわからず質問させていただいた次第です。
- 上記のソースコードでビルドを行ったところ、構文エラーが発生しています。特に、識別子 'GetInfo' のエラーが発生しており、どのように修正すれば良いかわかりません。
- 上記のソースコードでは、typedef定義型を使って関数を宣言しています。Infoという構造体型を定義し、その型を返り値とする関数GetInfoを宣言しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
掲示されているソースでビルドしましたが… >\my documents\visual studio 2008\projects\qa6421111\qa6421111\sample.c(4) : error C2440: 'return' : 'int' から 'Info' に変換できません。 となっただけ(当然の結果)…ですね。 # sample.cは#includeから始まりますので、4行目はreturnのある行です。 # 質問者さんのソースで先頭に空行があるのでしょうけど。 ちなみに、プロジェクトは「Win32 コンソールアプリケーション」で「空のプロジェクト」としています。
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
回答No.3
#1です … 勇み足だったようですね 今開発環境が手元にないので ちょと調べることができません 夜中になれば帰宅できるのでそれから調べてみますね ^^; typedefでこけるなら ヘッダーでもこけそうですね ・・・
- asuncion
- ベストアンサー率33% (2127/6289)
回答No.2
>構造体のタグ名とtypedefでの定義が同じであるためにコンパイラがどちらか判断できないでいるのだと思います 両者の名前空間は別々なので、同じ名前を付けてもコンパイラーは混乱しないはずです。
- redfox63
- ベストアンサー率71% (1325/1856)
回答No.1
構造体のタグ名とtypedefでの定義が同じであるためにコンパイラがどちらか判断できないでいるのだと思います typedef struct tagInfo { int a; int b; int c; } Info; といった具合に タグ名と定義名称を変えてみましょう
質問者
お礼
ご回答ありがとうございます。 ご指摘のように修正してみましたが、エラーは改善されませんでした。 # エラー内容にも変化がないようです。 他に、何かお気づきの点があればご教示くださいますと幸いです。
お礼
ご回答ありがとうございます。 記載いただいておりましたように、「空のプロジェクト」から作成して同様のソースを記述すると、「error C2440:'return' : 'int' から 'Info' に変換できません」となりました。 Sample.cのInfo GetInfo()部分を以下のように修正しましたところ、正常にビルドできるようになりました。 ------ Info GetInfo(){ struct Info taginfo = {1,2,3}; return taginfo; } ------ 「空のプロジェクト」として作成する以外は、プロパティの設定等をまったく同じにしたのですが、正常にビルドできています。 ちなみに、知識不足で大変申し訳ないのですが、「空のプロジェクト」として作成する場合としない場合でビルド結果が変わるのはなぜなのでしょうか? #参考になりそうなURLなどがありましたら、URLのご提示でも構いませんので、ご教示いただけると幸いです。