dポイントプレゼントキャンペーン実施中!

はじめて質問させていただきます。
Visual C++ 2008 Express Editionを使ってC言語のソースコードを記述しています。
(OSはWindows XPを使用しています。)
ビルドを行った際に以下のエラーが発生していて、先に進めません。
色々と調べてみたのですが、解決方法がわからず質問させていただいた次第です。
解決方法についてご存知の方がいらっしゃいましたら、回答いただけると嬉しいです。

■エラー内容
------ ビルド開始: プロジェクト: Sample, 構成: Debug Win32 ------
コンパイルしています...
Sample.c
d:\sample\sample\Sample.c(4) : error C2061: 構文エラー : 識別子 'GetInfo'
d:\sample\sample\Sample.c(4) : error C2059: 構文エラー : ';'
d:\sample\sample\Sample.c(4) : error C2059: 構文エラー : ')'
ビルドログは "file://d:\Sample\Sample\Debug\BuildLog.htm" に保存されました。
Sample - エラー 3、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

■Sample.c

#include "stdafx.h"

Info GetInfo(){
return 0;
}

int main(){
return 0;
}

■stdafx.h

#pragma once

#include "def.h"
#include <stdio.h>
#include <tchar.h>

Info GetInfo();

■def.h

typedef struct Info{
int a;
int b;
int c;
} Info;

A 回答 (4件)

掲示されているソースでビルドしましたが…



>\my documents\visual studio 2008\projects\qa6421111\qa6421111\sample.c(4) : error C2440: 'return' : 'int' から 'Info' に変換できません。

となっただけ(当然の結果)…ですね。
# sample.cは#includeから始まりますので、4行目はreturnのある行です。
# 質問者さんのソースで先頭に空行があるのでしょうけど。

ちなみに、プロジェクトは「Win32 コンソールアプリケーション」で「空のプロジェクト」としています。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
記載いただいておりましたように、「空のプロジェクト」から作成して同様のソースを記述すると、「error C2440:'return' : 'int' から 'Info' に変換できません」となりました。

Sample.cのInfo GetInfo()部分を以下のように修正しましたところ、正常にビルドできるようになりました。
------
Info GetInfo(){
struct Info taginfo = {1,2,3};
return taginfo;
}
------
「空のプロジェクト」として作成する以外は、プロパティの設定等をまったく同じにしたのですが、正常にビルドできています。

ちなみに、知識不足で大変申し訳ないのですが、「空のプロジェクト」として作成する場合としない場合でビルド結果が変わるのはなぜなのでしょうか?
#参考になりそうなURLなどがありましたら、URLのご提示でも構いませんので、ご教示いただけると幸いです。

お礼日時:2011/01/02 23:27

#1です …



勇み足だったようですね
今開発環境が手元にないので ちょと調べることができません

夜中になれば帰宅できるのでそれから調べてみますね ^^;

typedefでこけるなら ヘッダーでもこけそうですね ・・・
    • good
    • 0

>構造体のタグ名とtypedefでの定義が同じであるためにコンパイラがどちらか判断できないでいるのだと思います



両者の名前空間は別々なので、同じ名前を付けてもコンパイラーは混乱しないはずです。
    • good
    • 0

構造体のタグ名とtypedefでの定義が同じであるためにコンパイラがどちらか判断できないでいるのだと思います



typedef struct tagInfo {
  int a;
  int b;
  int c;
} Info;

といった具合に タグ名と定義名称を変えてみましょう
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご指摘のように修正してみましたが、エラーは改善されませんでした。
# エラー内容にも変化がないようです。

他に、何かお気づきの点があればご教示くださいますと幸いです。

お礼日時:2011/01/02 20:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!