>しかし、VisualStudioでは、プロジェクトの中にたくさん.cppファイルを作るとバグるときがあります。
バグる、というのがVisualStudioが動作を停止してしまうのか、作成したプログラムにバグが入るのかあいまいなのですが、私の経験からはVisualStudioが動作を停止してしまうことは割とよく見かけるので、こちらのことだとして説明します(逆にcppが多いからと言って、ビルドした実行ファイルに不具合があることはまずありえません)。
VisualStudioではインテリセンスという機能があって、プロジェクト内のソースコードすべての情報(クラス、関数、変数などの情報)をデータベース化して、入力途中に候補を選択できるようにしたり、ソース内で使用されている場所から宣言部、実装部にジャンプしたりすることができます。ただ、この情報を収集する作業を行っている途中別の操作をしたときに時々不整合を起こすのか、IDEが応答しなくなって落ちることがあります。おそらく今回の現象はこのことを指摘されているのだと思います。
これはもうVisualStudioの持つ持病みたいなもので、長く使っていると「またか」レベルの現象になりますので、こまめにセーブするなど対症療法を身に着けるしかないと思います。
>またmain関数が記された.cppファイルと違う.cppファイルでクラスを宣言した時どのようにしたら違うファイルで宣言したクラスを使えるようになるのでしょうか。
JavaだとImportで別モジュールのクラスを使えるようにしますが、C++だとクラス宣言が記述されているhファイル(ヘッダーファイル)を#includeという宣言で取り込みます。Javaだとjavaファイルにクラスの宣言およびその実装を記述しますが、c++はhファイルにクラスの宣言(メンバ関数は宣言のみ)、cppファイルにメンバ関数の実装を記述します。別のcppファイルでそのクラスを使用した場合、
lang
1(hoge.h内)
2class Hoge {
3 void func();
4};
5
6(hoge.cpp内)
7#include "hoge.h"
8void Hoge::func()
9{
10 // 処理
11 :
12}
13
14(main.cpp内)
15#include "hoge.h"
16
17int main(int argc, char argv[]) {
18 Hoge h;
19 h.func();
20 :
21 :
22}
のように#include "hoge.h"とHogeクラスの宣言を取り込んで、Hogeクラスを使用することになります。なので、c++に置いてはcppにクラスの宣言+実装を記述するのではなく、hファイルとcppファイルに分ける必要があります。
Javaのようにcppにすべてを記述したい、というのであれば
とやってもできるとは思いますが、Javaのようにメンバ関数を全てインライン関数としてクラス宣言の中に記述する必要があるなど、あまりc++では褒められた方法ではありません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/17 06:26
2015/05/17 06:52