電子書籍の厳選無料作品が豊富!

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;
}

A 回答 (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)以外にも良い使い方があれば教えてください。

補足日時:2013/03/11 22:10
    • good
    • 0

どんなエラーが出てるのかわからないので、推測になりますが。


(あなたが作ったプログラムを他人が使ったとして、「エラーが出てる」だけでは原因はわからないですよね。)

.cppファイルをインクルードしているのですが、クラスの実装部分が.cppファイルに記述されているのですよね。
そうであれば、例えばpoint.cppの内容はpoint.cppのコンパイル時とメイン部分のコンパイル時の2回出てくるため、リンク時に重複しているとなるんじゃないでしょうか。

この回答への補足

ソースファイルが置いてあるディレクトリから、コマンドプロンプトで、(list12.cppはエントリポイントのファイル名です。)

>cl /EHsc list12.cpp /link /DEBUG /OUT:"..\Debug\list12.exe"

を実行すると所望の実行ファイルがビルドできます。

これと同じ操作を、Expressのメニューを使ってう方法がよく分からないのです。
メニューの「ツール」->「設定」->「上級者用の設定」にして使っているのですが、
メニューの「ビルド」で「list12のビルド」または「ソリューションのビルド」を選んでビルドしても
同じようにエラーをはいてしまいます。おっしゃられているようにインクルードしている個別のファイルをコンパイルしている時にエラーをはいています。上記コマンドプロンプトの記述通りに、個別のファイルをコンパイルしないようにする設定方法が分かりかねています。

補足日時:2013/03/11 12:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!