• ベストアンサー

C++でのエラーメッセージの意味

C:\Program Files\Microsoft Visual Studio\MyProjects\hello\hello.cpp(73) : error C2562: 'main' : 関数は 'void' 型として宣言されていますが、値を返しました。 C:\Program Files\Microsoft Visual Studio\MyProjects\hello\hello.cpp(6) : 'main' の宣言を確認してください。 cl.exe の実行エラー hello.exe - エラー 1、警告 0 ************************** C++で、コンパイルしたら、上記のエラーメッセージが表示されました。 考えられるエラーは何でしょうか? どのように直したらよいでしょうか? どうかお教えください。

  • gost
  • お礼率90% (423/469)

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

  • ベストアンサー
  • natural
  • ベストアンサー率37% (419/1115)
回答No.3

補足に対する回答ですが、その通りです。 voidというのは「無い」ということを示します。 つまり、この場合返却値がないということになっているわけです。 それなのに0を返している…、おかしいですよね? ですから、この場合intとすれば良いわけです。 voidにして返却値を返さない手もありますが、現在の流儀としてはmainはintで定義するものなので。

gost
質問者

お礼

2度に亘るご返答有り難うございました。 voidとは、無いという意味であったのですね。 知りませんでした。 voidにしてreturn (0);しない方法もあるのですね。 現在の流儀も知りえました。 ご親切に感謝致します。

その他の回答 (2)

  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

メッセージ通りだと思います。 main関数の宣言がvoid型で行われているのにreturnで値を返しているのではないでしょうか。 例えば0を返しているのならば、main関数をint型で定義すれば良いと思います。

gost
質問者

補足

void main() { …(中略) return (0); } 上記であると誤りなのですか? int main(void) { …(中略) return (0); } であると、正しいのでしょうか?

  • satoryu
  • ベストアンサー率50% (4/8)
回答No.1

失礼ですが、 どのようなプログラムなのでしょうか? エラー指定がされている行、またはそれを含む関数部分だけでも いいので載せて頂ければ、回答ができるかと思います。

gost
質問者

お礼

早速のご返答有り難うございました。 超初心者ですので、自分のプログラムを見せるというのは恥ずかしいです。(^^;

関連するQ&A

  • C++, strcpy の warning.

    VC2005 Express Edition を使ってます。 #include <iostream> #include <string> using namespace std; int main() {   char str[10] = "hello";   strcpy(str, "HELLO"); } ↑ こちらをコンパイルすると hello.cpp .\hello.cpp(8) : warning C4996: 'strcpy' was declared deprecated C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(73) : see declaration of 'strcpy' という警告が出るのはどうしてでしょうか? #include <string.h> も試したのですが同じ警告でした。

  • 64ビット コマンドライン Cプログラミング

    私の環境は以下のとおりです CPU x6800 メモリ 8GB Vista 64 sp1 Visual studio 2005 やりたいことは、コマンドプロンプト[ > ] で 大きな配列 char dem[1000][1000][2000] を使うCプログラムを作成し使用すること。 質問したいことは、 コマンドラインの環境設定(PATH: bin lib include) コンパイラ リンカ の/オプション はどのように設定したらよいのでしょうか。 現状は work.c のコンパイル+リンク で work.exe はエラーなく成功するのですが 実行すると、{ work.exeは有効な win32 アプリケーションではありません。} というエラーが出て実行できません。 配列の要素を2000->1000にすればもちろんエラーは出ません。 なおこのときのコマンドプロンプトは  Visual Studio 2005 x64 Win64 コマンド プロンプト PATH は次のようになっています。 PATH=C:\Program Files (x86)\Microsoft Visual Studio 8\VC\BIN\amd64;  C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\bin\win64\amd64;  C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\bin;  C:\Windows\Microsoft.NET\Framework64\v2.0.50727;  C:\Program Files (x86)\Microsoft Visual Studio 8\VC\VCPackages;  C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE;  C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools;  C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\bin;  C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\bin;  C:\Windows\system32;C:\Windows;  C:\Windows\System32\Wbem;  C:\Windows\System32\WindowsPowerShell\v1.0\ 先達のご教示をお願いいたします。

  • C++のvectorについて教えてください。

    C++のvectorについて教えてください。 現在悩んでいる問題について簡単に説明するために、テストコードを書きました。 #include <vector> class IntType { private: int num; public: IntType( int n ):num( n ){}; }; std::vector< IntType > IntVector; void main() { } このコードをDebug版でコンパイルすると 1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\xutility(285) : error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : テンプレート 引数を 'const std::reverse_iterator<_RanIt> &' に対して 'const size_t' から減少できませんでした 1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\xutility(2236) : 'std::operator <' の宣言を確認してください。 のようなエラーが出ます。 しかし、Release版でコンパイルするとコンパイルは通ります。 Debug版でコンパイルを通すにはどのようなコードを追加すればよいでしょうか? 知恵を貸してください。 よろしくおねがいします。 /** VisualStudio2008 AcademiEdition */

  • iostream インクルード時に発生するエラー

    C++ の勉強をするためにVisualStudio2008にて下記コードをビルドしたのですが、エラーが発生してビルドが失敗しました。 ■ コード #include <iostream> using namespace std; int main() { std::cout << "Hello World !"; return 0; } ■ 操作 空のコンソールアプリケーションを作成し、ソースファイルに追加>新しい項目 にて "temp.cpp" を追加、コードを入力。その後 ビルド > ソリューションのビルド を実行。 ■ エラー(一部) >> 「説明」 列 warning C4985: 'strlen': 前の宣言に属性が存在しません。 error C2039: 'wmemcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemcpy_s': 識別子が見つかりませんでした error C2039: 'wmemmove_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemmove_s': 識別子が見つかりませんでした error C2039: 'memcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'memcpy_s': 識別子が見つかりませんでした error C2039: 'memmove_s' : '`global namespace'' のメンバではありません。 >>対応する「ファイル」列 d:\program files\microsoft visual studio 9.0\vc\include\exception d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd プロジェクトのプロパティやインストール時の構成などで何か問題があるのでしょうか。VisualStudio以外にはWindows SDK 、Windows SDK 6.0A、SQL Server2005などが導入されています。 再インストールするのもありかと思ったのですが、原因が分からないとまた同じ現象が発生しそうなため踏み切れません。 よろしくお願いします。

  • CygwinからVisual C++へ

    Cygwinでコンパイルしていたプログラムを、 Visual C++の cl コマンドでコンパイルしたいです。 あるプログラムを書きまして、Cygwinをインストールし、 [block.rc] BLOCKS BITMAP "block.bmp" という内容のリソースファイルを作成して、 windres block.rc -o block.o gcc -mwindows aaa.cpp block.o でちゃんとコンパイルできていました。 上記のように Visual Studio 2010 のVisual C++でコンパイルするにはどうしたらいいのかわかりません。 cl aaa.cpp block.o とやっても cl -mwindows aaa.cpp block.o とやっても、コンパイルできませんでした。 -mwindowsに代わるclコマンドのオプションを探してはみてみたものの、 -GA windowsアプリケーション用の最適化を行う というものを見つけたのでやってみましたがだめでした。 どなたか、コンパイルのアドバイスを下さい。

  • 見た目は同じソースなのにエラーがでてしまう。

    初めての質問です。 私は初心者で、Visual C++ 2005 Express Editionを使っています。 最近、C++を勉強しようとあるホームページの『0からのゲームプログラミング』という講座を見始めていて、そこの構造体の回の所のサンプルをスキルアップのため手書きで書いてデバックをしてみたらエラーが出てしまいました。 ↓このページがそうです。 http://www.plustarnet.com/aspil/Programming/ ↓上のページの構造体の回のリンクです。(問題のサンプルは下の方です。) http://www.plustarnet.com/aspil/Programming/c24.htm そこまではいいんですがそのエラーを見ても全然意味が分からなく、その講座のサンプルと自分のソースを見比べてみても 自分の目で見る限りではスペルミスなどはひとつもありませんでした。そこで、サンプルをそのままコピーしてデバックしてみると今度はちゃんと正常に実行されます。そこで質問なのですが、見た目はまったく同じソースなのにエラーが出ることはありえるのでしょうか? それとも、やはり自分が間違って書いているのでしょうか? 正直言うところいくら見直してもエラーが出るのでまるでVisual C++が自分のプログラムだけを拒否しているかのように思い始めているほどです。ちなみに以下が自分で書いたプログラムです。 //この行のすぐ下の行からです。 #include <stdio.h> #include "Main.h" // 構造体宣言 tagCharacter g_Hero; // 勇者 tagCharacter g_Satan; // 魔王 // 関数のプロトタイプ宣言 void HeroStatus(void): void SatanStatus(void); void main(void) { g_Hero.lLife = 35; g_Hero.lStrength = 15; g_Satan.lLife = 305; g_Satan.lStrength = 105; HeroStatus(); SatanStatus(); } // 勇者のステータスを表示 void HeroStatus(void) { printf("勇者のライフ:%d\n", g_Hero.lLife); printf("勇者の力 :%d\n\n", g_Hero.lStrength); } // 魔王のステータスを表示 void SatanStatus(void) { printf("魔王のライフ:%d\n", g_Satan.lLife); printf("魔王の力 :%d\n\n", g_Satan.lStrength); } //上の行まで ※著作権が心配です・・・ そして以下が自分のプログラムででたエラーです。 ※アドレスの最初のほうは消しています。 ※C++のインストール場所はデフォルトにしています。 1>------ ビルド開始: プロジェクト: test12, 構成: Debug Win32 ------ 1>コンパイルしています... 1>Main.cpp 1>\visual studio 2005\projects\test12\test12\main.cpp(11) : error C2062: 型 'void' は不要です。 1>\visual studio 2005\projects\test12\test12\main.cpp(13) : error C2062: 型 'void' は不要です。 1>\visual studio 2005\projects\test12\test12\main.cpp(14) : error C2630: ';' はコンマで区切られたリストで使用しなければなりません。 1>\visual studio 2005\projects\test12\test12\main.cpp(22) : error C3861: 'SatanStatus': 識別子が見つかりませんでした 1>\visual studio 2005\projects\test12\test12\main.cpp(27) : error C2084: 関数 'void HeroStatus(void)' は既に本体を持っています。 1>\visual studio 2005\projects\test12\test12\main.cpp(10) : 'HeroStatus' の前の定義を確認してください 1>\visual studio 2005\projects\test12\test12\main.cpp(34) : error C2365: 'SatanStatus' : 再定義; 以前の定義は '以前は不明な識別子' でした。 1>ビルドログは "file://\Visual Studio 2005\Projects\test12\test12\Debug\BuildLog.htm" に保存されました。 1>test12 - エラー 6、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== 以上です。今回は初めての質問ということで書き言葉や文面を不快に思うかもしれないですがそこの所はお許しください。非常に長文の所も お許しください。 最後に何もわからない自分の質問を読んでいただきありがとうございました。

  • WiiYourself!をコンパイルできない

    WiiYourselfをVisualStadio2008(visual C++)でDemoフォルダのソースをコンパイルしようとしたのですがコンパイルエラーが100個以上出て失敗してしまいました(ソースは入手したときのままです)。エラーは以下のとおりです。 1>c:\program files\microsoft visual studio 9.0\vc\include\excpt.h(60) : error C2065: '_In_' : 定義されていない識別子です。 1>c:\program files\microsoft visual studio 9.0\vc\include\excpt.h(60) : error C2144: 構文エラー : '_EXCEPTION_RECORD' は ')' によって先行されなければなりません。 1>c:\program files\microsoft visual studio 9.0\vc\include\excpt.h(60) : error C2448: '_except_handler' : 関数の定義が間違っています。 1>c:\program files\microsoft visual studio 9.0\vc\include\excpt.h(61) : error C2144: 構文エラー : 'void' は ';' によって先行されなければなりません。 1>c:\program files\microsoft visual studio 9.0\vc\include\excpt.h(62) : error C2144: 構文エラー : '_CONTEXT' は ';' によって先行されなければなりません。 1>c:\program files\microsoft visual studio 9.0\vc\include\excpt.h(63) : error C2144: 構文エラー : 'void' は ';' によって先行されなければなりません。 1>c:\program files\microsoft visual studio 9.0\vc\include\excpt.h(64) : error C2059: 構文エラー : ')' 1>c:\winddk\7600.16385.0\inc\api\windef.h(49) : error C2143: 構文エラー : ';' が '*' の前にありません。    ........ 開発環境は以下の通りです Windows vista WDM (インクルード(inc/api) ライブラリ(lib/wxp/i386)をvisual C++に設定している) WiiYourself1.01a とWiiYourself!_1.14b両方試しましたが同じ結果でした 原因をご存知の方がいらっしゃたらどうか書き込みお願いします。 よろしくお願いします。

  • C++でのエラーについて

    Microsoft Visual C++ 2010 Express において、以下のファイル (http://1st.geocities.jp/shift486909/program/Bernoulli/func.cpp) をコンパイルしようとすると、 1>------ ビルド開始: プロジェクト: eter, 構成: Debug Win32 ------ 1>LINK : error LNK2001: 外部シンボル "_WinMainCRTStartup" は未解決です。 1>c:\users\garnet\documents\visual studio 2010\Projects\eter\Debug\eter.exe : fatal error LNK1120: 外部参照 1 が未解決です。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== というようなエラーが出てコンパイルできません。 何が原因なのでしょうか?

  • windows10でVC6.0++のclを使いたい

    cl.exeの場所:C:\Program Files\Microsoft Visual Studio\VC98\Bin 環境変数INCLUDE設定:C:\Program Files\Microsoft Visual Studio\VC98\Include 環境変数LIB設定:C:\Program Files\Microsoft Visual Studio\VC98\Lib を登録したのですが、mspdb60.dllがないといわれました。 検索したらあるのですが、 どうすれば、Windows10でvc6.0++のCコンパイラを使えますか? 教えてくださいよろしくお願いします。

  • 粒子法プログラムのビルドエラー(cstdlibのエラー)

    粒子法のMPS法のプログラミングをしているのですが、C++でmps.cをビルドをすると、cstdlibのエラーが出てビルドが出来ません。 mps.cの本文中にはエラーは無く、visual studio 9.0にあるcstdlibの構文エラーが出てしまいます。 最初から入っているライブラリファイルが間違っているとは思えません。 解決法を教えてください。お願いします。 ↓ mps.c内でcstdlibを使っている場所 ↓ #include <cstdlib> /* This line is necessary for C++ compiler. Remove this line in C compiler */ #include <stdio.h> #include <sys/types.h> #include <math.h> #include <string.h> ↓ エラーメッセージ ↓ 1>コンパイルしています... 1>mps.c 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 省略(21行目のエラーが23~32行目まで同じエラーが続く) 1>MPS3000 - エラー 62、警告 0 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========