- ベストアンサー
C++ クラスの作り方とエラーメッセージ対処法
- Windows10の上で、Visual Studio Community2015 を使ってC++を勉強中の者です。Time クラスを定義して使おうとしましたが、エラーメッセージが出てきて、どこが悪いのかわかりません。
- 詳しい方がいらっしゃいましたら、ご教授お願い致します。問題のエラーメッセージの内容は次のとおりです。
- "consoleApplication69.cpp" 作成中にエディターの中で、波型の赤線が出ているところにカーソルを持っていくと、エラーメッセージが出てきます。具体的には、#include "time3.h" のところで「ソースファイルをひらけません。"time3.h"」というエラーメッセージが表示されます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
追加のご質問に返信いたします。 >>やり方が間違っているでしょうか? すみません。具体的な操作まではわからないです。 とりあえずご案内したかったことは、 ソリューションとプロジェクトの関係と、 VSの内部動作についてです。 ひとつのアプリを作成するとき、 exeとdllというように分けて作成することがあります。 このexeやdllはそれぞれがプロジェクトです。 それをひとまとめにするのがソリューションです。 そういうわけでソリューションに表示されても、 プロジェクトに入っていない可能性を、 ご案内したかったのです。 私は過去のバージョンを触ったことありますが、 テキトーにファイル追加しても、 コンパイルは通らなかったので、 ソリューションとプロジェクトを新規に作り直し、 って対応した記憶があります。 解決に直結してなくてごめんなさい。
その他の回答 (5)
- wormhole
- ベストアンサー率28% (1626/5665)
>プロジェクトはC++の中のCLRコンソールアプリケーションというものです。C++/CLIとは何かわかりません。 C++/CLIは.NET Frameworkで実行するプログラムを作成するためにC++を拡張した言語です(C++/CLIは文法上C++の上位互換ですけど別言語と思った方がいいです)。 Visual Studio 2015だとC++でCLRコンソールアプリケーションを作る際にはC++/CLIになると思います。 >上のエラーメッセージにあるLNK2028やLNK2019、LNK1120:2などはどこを検索すれば見つかるのでしょうか。 Visual Studio 2015のIDEのメニューからヘルプ→ヘルプの表示でヘルプがブラウザで開きますから、そこから Visual Studio 2015→Visual C++→IDEと開発ツール→C/C++プログラムのビルド→C/C++ビルドのリファレンス→C/C++ビルドエラー で各種エラーの書かれたページに行けます。
お礼
色々有難うございます。 勉強しなくてはならないことが山のようにあるようです。 最初はちょっとした趣味のように考えて始めたプログラミングですが、甘い考えではついていけないことが分かりました。でもせっかく始めたので、少なくともC++の基本ををマスターするまで頑張るつもりです。応援よろしくお願いします。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> プロジェクトはC++の中のCLRコンソールアプリケーションというものです。C++/CLIとは何かわかりません。 ひとまず "Win32コンソールアプリケーション” で仕切り直し。
お礼
ご回答有難うございます。 Win32コンソールアプリケーションでやり直してみます。
補足
Win32コンソールアプリケーションで空のプロジェクトを作り、プロジェクトメニュー=>新しい項目の追加でヘッダーファイル、 関数定義ファイル、main() の入ったプログラムファイルを用意して、それぞれに前のプロジェクトからのものをコピーしてきましたが、#include "stdafx.h", using namespace System; のところで、赤い波線が出てきました。"stdafx.h"と"stdafx.cpp" は、プロジェクト=>既存の項目の追加でプロジェクトに加えてあります。なんだか一番最初の問題に戻ったような状況です。
- skp026
- ベストアンサー率45% (1010/2238)
たぶんですけど、 そのソリューションのプロジェクトへ、 ファイルを追加した手順に問題があり、 うまくビルドの設定に反映されてないのかも… 右クリックして、プロジェクトに追加くらいしか思い付かないです。 ビルドの設定とかみても分かる気がしますが、 具体的な操作はわからないです。 役に立たなくてごめんなさい。 以下の方が正解をくれやすいかも。 Visual C++ 全般のフォーラム http://go.microsoft.com/fwlink/?LinkId=158194 Visual C++ 言語のフォーラム http://go.microsoft.com/fwlink/?LinkId=158195
お礼
ご回答有難うございます。 自分のやった方法は、ファイルメニューから新規作成==>ファイルとしてヘッダーファイルtime3.hと、関数定義ファイルtime3.cpp を書いた後、それぞれのタブをクリックしてハイライトしてから、ファイルメニュー==>ファイルの移動先==>consoleApplication69 とやって、ソリューションエクスプローラーにそれぞれが追加されたので、このプロジェクトの中に含まれたと解釈したのですが、やり方が間違っているでしょうか?
- wormhole
- ベストアンサー率28% (1626/5665)
>しかし今度はリンクエラーが出てしまい、コンパイルできません。 リンクエラーではわかりません。 出力されているエラーメッセージをそっくりそのまま書きましょう。 気になるのはプロジェクトがC++ではなくC++/CLIのようですけど。
お礼
ご回答有難うございます。 エラーメッセージは下の通りです。 1>------ ビルド開始: プロジェクト:ConsoleApplication69, 構成:Debug Win32 ------ 1> time3.cpp 1> AssemblyInfo.obj : マネージ コードが存在する場合は、/DEBUG:FASTLINK はサポートされません。/DEBUG:FULL でリンクを再開します 1>ConsoleApplication69.obj : error LNK2028: 1>ConsoleApplication69.obj : error LNK2019: 1>C:\Users\Shiro\documents\visual studio 2015\Projects\ConsoleApplication69\Debug\ConsoleApplication69.exe : fatal error LNK1120: 2 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== プロジェクトはC++の中のCLRコンソールアプリケーションというものです。C++/CLIとは何かわかりません。 上のエラーメッセージにあるLNK2028やLNK2019、LNK1120:2などはどこを検索すれば見つかるのでしょうか。 アドバイス頂けるとありがたいです。
- neKo_quatre
- ベストアンサー率44% (735/1637)
エラーの内容に関しては、プロジェクトがTime3.hを認識していないのが原因で、そこさえ解決すれば全部解決(して次の問題点が見つかるかも?)するように思います。 > ソリューションの中に入れたつもりですが、 そのように見えますね。 ソリューションエクスプローラのTime3.hをダブルクリックして、対象のファイルが開けますか? ソリューションエクスプローラから一旦削除、再度追加してみては? ソリューションエクスプローラから一旦削除、Time3.hを別の場所に移動、ソリューションエクスプローラで新規にTime3.hを作成、中身をコピペとかでは。
お礼
早速にご回答をいただき、有難うございます。 >ソリューションエクスプローラから一旦削除、Time3.hを別の場所に移動、ソリューションエクスプローラで新規にTime3.hを作成、中身をコピペとかでは。 この方法でソースコード内のエラーは消えました。 しかし今度はリンクエラーが出てしまい、コンパイルできません。 全く新しいプロジェクトにして、ソースファイルをコピーしてやってみましたが、結果は同じです。 何かアドバイスを頂けると有り難いです。
お礼
有難うございます。 プロジェクトとソリューションの関係さえも知りませんでした。 Visual Studio そのものの教本を探して、勉強したいと思います。
補足
前回教えて頂いた英語の質問サイト http://go.microsoft.com/fwlink/?LinkId=158194 にポスティングしたら、デストラクターの定義がないのにクラスの中にメンバーとして入っているのが原因だとわかりました。そこでデストラクターをコメントアウトしてからビルドしたら、問題なくコンパイルできました。英語で質問を書くのはきついのですが、いいサイトを教えて頂いて感謝します。 今回の質問に多くの方々から回答を頂き、どの方の回答も本当にありがたく思いますが、問題の解決に直接つながったということで、SKP026さんをベストアンサーにさせていただきます。ほかの方々、どうかあしからずご了承ください。