
VC++2010 Expressを使ってC++を書いているのですが、
今までは、使用するクラスファイルを全てエントリーポインのある
int _tmain(int argc, _TCHAR* argv[])の上に記述して使っていたのですが、クラスの数が増えてきたので、エントリーファイルと同階層のソースファイルフォルダの下に置くようにしました。この場合、たとえば下記のメイン部分のように、
基底クラスの読み込み順を考量して、#includeしているのですが、エントリポイントのファイルを「右クリック」->「コンパイル」はエラー無しではけるようになったのですが、
F5キーでデバッグを開始してビルドする多くのエラーをはいてしまいます。
とりあえず、全てのクラスファイルをインクルードした形のエントリポインタのファイルのコンパイルはうまくいっているので、その結果を使ってビルドする方法が分かりかねています。
Expressの使い方の問題だと思うので、御経験のある方、御教示願えたらと思います。
<メイン部分>
#include "stdafx.h"
#include <iostream>
using namespace std;
#include "point.cpp"
#include "canvas.cpp"
#include "shape.cpp"
#include "rect.cpp"
#include "triangle.cpp"
#include "square.cpp"
int _tmain(int argc, _TCHAR* argv[])
{
Canvas c;
Shape *shape[3];
Rect r(5, 5, 20, 10);
shape[0] = &r;
Triangle t(1, 18, 16, 8);
shape[1] = &t;
Square s(22, 2, 6);
shape[2] = &s;
for (int i=0; i<3; i++) shape[i]->draw(&c);
c.show();
getchar();
return 0;
}
No.2ベストアンサー
- 回答日時:
結局エラーの内容は秘密ですか?
私の推測通りのエラーであれば、プロジェクトからインクルードしているファイル(point.cpp、canvas.cppなど)を削除してください。
.cppファイルがプロジェクトに存在すると、VCはコンパイル・リンクしようとします。list12.cpp内でインクルードした内容と同内容が別ファイルのコンパイルで出来上がるため、重複が起こります。
この回答への補足
情報ありがとうございます。
一応、以下の2通りの仕方でできました。
(1)list12.cppのインクルードの内容を、#include "point.h"のようにインクルードファイルに
換えて、クラスの記述をヘッダーファイルに上記の名前のファイルとして記述する。最後に、ソル―ションビルドを実行する。
(2)今まで通り、#include "point.cpp"の記述でcppファイルをソースファイル下に置く。この状態でlist12.cppを右クリック->「コンパイル」を実行。その後、list12.cpp以外のファイルを右クリック->「プロジェクトから除外」を実行。最後に、ソル―ションビルドを実行する。(除外したファイルはソースファイルの記述からは消えますが、フォルダの中にはまだ残っていて、「ソル―ションエクスプローラ」の「すべてのファイルを表示」をクリックすると表示されるようです。
皆さん、どのように使っているかよく分からないので、上記(1)、(2)以外にも良い使い方があれば教えてください。
No.1
- 回答日時:
どんなエラーが出てるのかわからないので、推測になりますが。
(あなたが作ったプログラムを他人が使ったとして、「エラーが出てる」だけでは原因はわからないですよね。)
.cppファイルをインクルードしているのですが、クラスの実装部分が.cppファイルに記述されているのですよね。
そうであれば、例えばpoint.cppの内容はpoint.cppのコンパイル時とメイン部分のコンパイル時の2回出てくるため、リンク時に重複しているとなるんじゃないでしょうか。
この回答への補足
ソースファイルが置いてあるディレクトリから、コマンドプロンプトで、(list12.cppはエントリポイントのファイル名です。)
>cl /EHsc list12.cpp /link /DEBUG /OUT:"..\Debug\list12.exe"
を実行すると所望の実行ファイルがビルドできます。
これと同じ操作を、Expressのメニューを使ってう方法がよく分からないのです。
メニューの「ツール」->「設定」->「上級者用の設定」にして使っているのですが、
メニューの「ビルド」で「list12のビルド」または「ソリューションのビルド」を選んでビルドしても
同じようにエラーをはいてしまいます。おっしゃられているようにインクルードしている個別のファイルをコンパイルしている時にエラーをはいています。上記コマンドプロンプトの記述通りに、個別のファイルをコンパイルしないようにする設定方法が分かりかねています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAではRound...
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
C言語でヘッダファイルにグロー...
-
ILSpyで、デコンパイルできない。
-
クリティカルエラー Expressio...
-
「fatal error C1189」を回避す...
-
VB6で開発中…標準モジュール間...
-
【VC++6.0(MFC)】警告「LINK : ...
-
マクロ コンパイルがグレーバック
-
[c++] <pthread.h>がinclude で...
-
「DeclareステートメントにPtrS...
-
ビルドとリビルドの違いを教え...
-
SingleCompile.vimでmsvc110
-
<math.h>があるのにsqrtが・...
-
PRO*C コンパイルエラー
-
「猫でもわかるプログラミング...
-
ExcelVBAで『ByRef 引数の型が...
-
cmakeは何をするのですか? cma...
-
VMwareのLinuxでコンパイルでき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
ILSpyで、デコンパイルできない。
-
<math.h>があるのにsqrtが・...
-
外部シンボル "_main"は未解決です
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
コンパイルエラー:ユーザ定義...
-
【VC++6.0(MFC)】警告「LINK : ...
-
1 つ以上の複数回定義されてい...
-
VB6とInputManソフトの関係
-
C言語でmからnまでの合計を求め...
-
ExcelVBAで『ByRef 引数の型が...
-
コンパイルに失敗しました、と...
-
漢字のコメントをはずすとコン...
-
C言語のコンパイルができません
おすすめ情報