• ベストアンサー

VC++で、ソースファイルを追加すると、コンパイルエラーになります。

こんばんは。 VC++6.0を使い、C言語の勉強をし始めました。新規プロジェクト→Win32 Console Application を作成し、簡単なプログラムを作成しています。 最初からあるソースファイルはコンパイル、実行できます。しかし、後から自分で追加したソースファイルは error C2065: 'printf' : 定義されていない識別子です。 という、エラーが出てしまいます。何かが、関連付けられていないのでしょうか?それとも、新規プロジェクトを作成しなければいけないのでしょうか? 私は、VC++が初めてなので、ぜんぜんわかりません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ryu_d
  • ベストアンサー率58% (33/56)
回答No.2

えっとコードが書かれていたので まず、自分の書いたコードの場所にstdafx.hがある事を確認して下さい。 ちなみにご存知だとは思いますが、ダブルクォートで囲まれたヘッダファイルはincludeパスから探しません。 #include <stdio.h> #include "stdafx.h" はNGです。ヘッダのインクルード順が間違っています。 #include "stdafx.h" #include <stdio.h> stdafx.hを先にインクルードしてあげてください。 stdio.hのインクルード文はstdafx.hに書いてあげるのもアリです。 さらに補足ですがprintf関数はstdio.hに明記されています。 その他関数もかかれていますので、見てみるとヘッダファイルの書き方が学べます。 ついでに何でヘッダファイルが必要なのかも。 C言語を覚えられると大概の言語をすんなり受け入れられるようになりますので(オブジェクト指向はちと違いますが)頑張って下さい。

kamkamkam3
質問者

補足

どうもありがとうございました。 教えていただいた様にヘッダファイルのインクルードの順番を #include "stdafx.h" #include <stdio.h> にしたら、以前のエラーは消えました。 しかし、今度は「 aa.obj : error LNK2005: _main はすでに a.obj で定義されています 」というエラーが出てしまいます。a.objは最初からあるソースファイルです。aa.objは追加したソースファイルです。 ちなみに、両方ともmain関数があります。ひょっとしたら、1つのプロジェクトにつき、main関数のあるソースファイルは1つだけでないと駄目なのですか? もし分かるようだったら、ご返事ください。よろしくお願いします。

その他の回答 (4)

  • ryu_d
  • ベストアンサー率58% (33/56)
回答No.5

純粋にCを勉強するのであればUNIXの方がいいと思います。もしくはMS-DOS(笑) cl.exeでコンパイルしてあげるのもいいですがUNIXの方が勉強しやすかったです。 なにげに、C言語ではオーバーライド、オーバーロードなど便利な機能は使えません。変わりにポインタを使いまくったりします。 Java楽ですからね。ライブラリも揃ってますし。

kamkamkam3
質問者

お礼

どうも、ご返事ありがとうございます。 C言語では、printf関数など、引数がたくさん取れますね。あれは、どういう仕組みになっているのでしょうか? cl.exeというのも、本を調べてやってみました。あれは、Javaのコマンドラインと同じですね。 どうも、ありがとうございました。またよろしくお願いします。

回答No.4

> Cはあまり経験がなく、短いソースを書くのに、いちいち新規プロジェクトから開くのもなぁ~と思っていたのですが。。。駄目みたいですね。 コマンドライン・コンパイラを使ってはいかがでしょう。

kamkamkam3
質問者

お礼

フリーソフトの、BCPadというものと、Borlandのフリーコンパイラを使ってみたら、ものすごく簡単にできるようになりました。 Windowsプログラミングでもやるようになったら、VC++を使ってみようと思います。 どうもありがとうございました。

回答No.3

> ひょっとしたら、1つのプロジェクトにつき、 > main関数のあるソースファイルは1つだけで > ないと駄目なのですか? mainであろうがなかろうが、同じ名前の関数が2つ以上あってはなりません。

kamkamkam3
質問者

お礼

どうも、ご返事ありがとうございます。 そうなんですか。私はJavaの開発をしていたため、同じ関数(メソッド)がいくらあっても良かったので。。Cでは、クラスがないので、関数名が同じだと駄目なのですね。勉強になりました。 どうもありがとうございました。Cはあまり経験がなく、短いソースを書くのに、いちいち新規プロジェクトから開くのもなぁ~と思っていたのですが。。。駄目みたいですね。 どうもありがとうございました。またよろしくお願いします。

  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

ヘッダが読み込まれていないためではないですか? #include 等はどうなっていますか? 他のソースファイル先頭の方にあるファイルを指定してみてください。

kamkamkam3
質問者

補足

どうも、ご返事ありがとうございます。確かサーバのときも返事をいただいたと思うんですが、どうもありがとうございました。 以下がソースコードです。"stdafx.h"というのは、VC++だとインクルードしなくては、いけないらしいです。 #include <stdio.h> #include "stdafx.h" int main(int argc, char *argv[]) { printf("Hello !!"); return 0; } 以下がエラーです。 --------------------構成: a - Win32 Debug-------------------- コンパイル中... aa.cpp D:\Applications\Microsoft Visual Studio\MyProjects\a\aa.cpp(6) : error C2065: 'printf' : 定義されていない識別子です。 cl.exe の実行エラー aa.obj - エラー 1、警告 0 ちなみに、ちゃんとコンパイル、実行できたファイルが以下となります。 #include "stdafx.h" #include <stdio.h> int main(int argc, char* argv[]) { printf("1年間の秒数は %dです",60*60*24*365); return 0; } 何回やっても(違うファイルでも)同じエラーが出てしまいます。もし、VC++をご存知だったら、教えてください。よろしくお願いします。 どうもありがとうございました。またよろしくお願いします。

関連するQ&A