我编写的一些 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
} ;
接受一个 int 参数的构造airline
函数是:
airline::airline (int np) {
npassengers = np;
persons.resize (npassengers);
return;
}
在 Windows 机器上,它编译并运行没有问题。然而,XCode 痛苦地抱怨说我没有一个可行的“乘客”构造函数。我有一个乘客的默认构造函数,所以这不是问题。根据我在本网站上一个较早的问题中发现的内容,我还尝试使用 people.erase 而不是调整大小,但没有成功。
最终,我能够通过使用persons.vector::resize (npassengers);
而不是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;
}
当然还有通常的访问器和重载的插入运算符等。谢谢!