私が書いたいくつかの C++ ソース コードは、Visual Studio 2010 を使用してコンパイルし、Windows 7 で正常に実行されました。しかし、XCode 4.4.1 を使用して Mac OS X 10.8 Mountain Lion で試したところ、コンパイルされませんでした。以下に詳述するように修正できましたが、そもそも何が間違っていたのか、なぜ修正が必要なのかを知りたいと思っています。
具体的には、次のクラス宣言を検討してください。
class airline {
vector <passenger> persons;
int npassengers;
public:
airline () {};
airline (int np);
~airline () {};
// other functions
} ;
airline
int パラメーターを取るコンストラクターは次のとおりです。
airline::airline (int np) {
npassengers = np;
persons.resize (npassengers);
return;
}
Windows マシンでは、これは問題なくコンパイルおよび実行されました。しかし、XCode は、「passenger」用の実行可能なコンストラクターがないと激しく不満を漏らしました。私はパッセンジャー用のデフォルトのコンストラクターを持っているので、それは問題ではありませんでした。このサイトの以前の質問で見つけたものに基づいて、サイズ変更の代わりにpersons.eraseを使用してみましたが、うまくいきませんでした。
persons.vector::resize (npassengers);
最終的に、代わりに を使用して、コードを Mac でコンパイルすることができましたpersons.resize (npassengers);
。Mac 側でなぜそれを行う必要があったのか、Windows 側では問題なく動作した理由が気になります。
関連する質問は、コードの先頭に置くのは悪い習慣ですかusing namespace std;
、代わりに指定する必要がありますstd::cout
か? もしそうなら、なぜですか?
知識不足ですが、よろしくお願いします!
編集:ショーンは、乗客のコードを表示することを提案したので、ここに行きます:
class passenger {
string plast;
string pfirst;
int row;
char seatno;
int flightno;
public:
passenger ();
passenger(string line );
passenger (passenger const &rhs);
~passenger() {};
} ;
passenger::passenger (passenger const &rhs) {
plast = rhs.plast;
pfirst = rhs.pfirst;
row = rhs.row;
seatno = rhs.seatno;
flightno = rhs.flightno;
return;
}
passenger::passenger( string line ) {
// tokenizes string to obtain passenger data
// seems to work fine, actual code is too long to include
// and doesn't seem relevant here
}
passenger::passenger() {
plast.clear();
pfirst.clear();
row = 0;
seatno = '\0';
flightno = 0;
return;
}
もちろん、通常のアクセサーやオーバーロードされた挿入演算子なども含まれます。ありがとうございます。