ページ 1 / 1
visual c++の仕様について
Posted: 2014年2月03日(月) 21:10
by kino
visual c++の環境で質問があります。
今継承の勉強をしていて、実際に継承と汎化を利用した実行ファイルを作ろうとしてます。
その際、コードをvisualC++のエディタに打ち込まないで、windowsのメモ帳に打ち込んでからvisual C++に追加するようにしました。
すると、main.cppファイルで一切の応答がなく行き詰ってしまいました。
外部のエディタから直接追加した物はvisualC++との互換性がないのでしょうか?
下のコードは今作っているものです。
コード:
//Jugyoin.h
class Jugyoin{
piblic:
int number: //社員番号
char shimei[80];//氏名
long kyuyo; //給与
};
コード:
//yakuin.h
#include"Jugyoin.h"
class yakuin:public Jugyoin{
public:
int kabu;
};
コード:
//kacho
#include"Jugyoin.h"
class kacho:public Jugyoin{
public:
int shuchohi;//出張費
};
コード:
//main.cpp
#include"stdio.h"
#include"yakuin.h"
#include"kacho.h"
#include"iostream"
using namespace std;
int main()
{
yakuin y;
y.number= 1234;
strcpy("役員太郎",y.shimei);
y.kyuyo = 500000;
y.kabu = 1000;
cout << "社員番号:"<< y.number << "\n";
cout <<"氏名:" << y.shimei << "\n";
cout <<"給与:" << y.kyuyo << "\n";
cout <<"株保有数:"<<y.kabu << "\n";
kacho k;
k.number = 1234;
strcpy("役員太郎",y.shimei);
k.kyuyo = 500000;
k.shucchouhi = 10000;
cout <<"社員名:"<<k.number <<"\n";
cout <<"氏名:" <<k.shimei <<"\n";
cout <<"給与:" <<k.kyuyo << "\n";
cout <<"出張費:" <<k.shucchouhi <<"\n";
};
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 21:57
by softya(ソフト屋)
私は常に秀丸を使っていますので外部エディタが不可なんて事はありません。
そもそも問題があればコンパイルエラーするはずです。
>すると、main.cppファイルで一切の応答がなく行き詰ってしまいました。
これがよく分かりません。
どういう状況なのでしょうか?あとデバッガで確認できませんか?
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 22:11
by みけCAT
kino さんが書きました:すると、main.cppファイルで一切の応答がなく行き詰ってしまいました。
Visual C++がフリーズして応答なしになったということですか?
オフトピック
一見strcpyで文字列リテラルに対しデータを書き込もうとしているように見えますが、
よく見るとstring.hやcstringをインクルードせず、独自のヘッダをインクルードしているので、
きっときちんと第二引数に第一引数のデータをコピーするstrcpy関数がそれらのヘッダで定義されているのでしょう。
ただ、紛らわしいのでいい命名ではないですね。
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 22:14
by softya(ソフト屋)
よく見たら、とりあえずstrcpyがあれですね。
C++ならstd::stringを使ったほうが素直なコードになると思います。
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 22:22
by kino
c++ファイルでの応答がないといいますか、main.cppファイルで実際に継承、汎化したkacho.hファイルとyakuin.hファイルをインスタンス化し、メンバ変数を使おうとしたのですが、mainでメンバ変数の定義をしても認識されていないみたいなのです。
デバッカを再確認したところ、初めにJugyoinクラスの再定義を要求されているみたいなのですが、どうゆうことかよくわかりません。
もしかしたら、Jugyoin.hファイルの多重宣言に問題があるのでょうか?
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 22:23
by みけCAT
Jugyoin.hにインクルードガードを追加するべきだと思います。
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 22:25
by softya(ソフト屋)
それはコンパイルエラーですよね。
#pragma once
で多重インクルードガードしてみてください。
コンパイルが通っていないのでデバッガは当然動いていないです。
エラーメッセッジをそのまま載せてもらうのが速道です。
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 22:45
by kino
Jugyoiクラスにインクルードをつけましたが、まだmain.cppファイルに変数が反映されていないようです。
また、コンパイルエラーメッセージ欄には「'kacho' の宣言を確認してください。」のみ消えないでいます。
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 22:50
by softya(ソフト屋)
kino さんが書きました:Jugyoiクラスにインクルードをつけましたが、まだmain.cppファイルに変数が反映されていないようです。
また、コンパイルエラーメッセージ欄には「'kacho' の宣言を確認してください。」のみ消えないでいます。
全ヘッダファイルにインクルードガードをしてください。
用語の用法が怪しいので、よく確認してから使ってくださいね。
> Jugyoiクラスにインクルードをつけましたが、まだmain.cppファイルに変数が反映されていないようです
説明になっていないのと、「変数が反映されていないようです」はどうやって確認したのですか情報の出し惜しみは回り道になるだけです。
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 22:50
by みけCAT
main.cppの27行目のスペルミスですね。
【追記】32行目もです。
Re: visual c++の仕様について
Posted: 2014年2月03日(月) 23:06
by kino
投稿した後、いろいろ見返してみておかしい部分(ほとんど自分のスペルミスでした)を直してみたところ何とか実行ファイルができました。
数々の指摘コメントありがとうございました。
とりあえず完成はしたのですが、どうしてもmainのメンバ変数にマウスを当てても何も表示されないのが気になります。
visualC++で作成すればきちんと、これがどの部分の関数か変数かがわかるようにマウスを当てれば表示されるみたいなのですが……。
やはりvisualC++で作成したほうが無難だと思います。
コード:
//Jugyoin.h
#pragma once //インクルードガード
class Jugyoin{
public:
int number; //社員番号
char shimei[80];//氏名
long kyuyo; //給与
};
コード:
#include"Jugyoin.h"
class yakuin:public Jugyoin{
public:
int kabu;
};
コード:
#include"Jugyoin.h"
class kacho:public Jugyoin{
public:
int shuchohi;//出張費
};
コード:
#include"stdio.h"
#include"yakuin.h"
#include"kacho.h"
#include"string.h"
#include"iostream"
using namespace std;
int main()
{
yakuin y;
y.number= 1234;
strcpy(y.shimei,"役員太郎");
y.kyuyo = 500000;
y.kabu = 1000;
cout << "社員番号:"<< y.number << "\n";
cout <<"氏名:" << y.shimei << "\n";
cout <<"給与:" << y.kyuyo << "\n";
cout <<"株保有数:"<<y.kabu << "\n";
kacho k;
k.number = 1234;
strcpy(k.shimei,"サラリー・マン");
k.kyuyo = 500000;
k.shuchohi = 10000;
cout <<"社員名:"<<k.number <<"\n";
cout <<"氏名:" <<k.shimei <<"\n";
cout <<"給与:" <<k.kyuyo << "\n";
cout <<"出張費:" <<k.shuchohi <<"\n";
};