2

我编写的一些 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;
}

当然还有通常的访问器和重载的插入运算符等。谢谢!

4

1 回答 1

1

除了缺少头文件或问题中未显示的其他代码存在问题外,我看不出代码不可移植的任何明显原因。我可以建议一些可移植代码行并进行一些改进:

#include <vector>
#include "passenger.h" // assuming class passenger is declared here

class airline {
    std::vector <passenger> persons_; // trailing underscore to distinguish data members
public:
    airline () {};
    explicit airline (int np); // explicit constructor to avoid implicit conversion from int.
~airline () {};
// other functions
} ;

在 .cpp 文件中:

airline::airline (int np) : persons_(np) {} // persons has np passengers

对于乘客人数,您不需要单独的数据成员。你可以从std::vector::size().

于 2012-08-21T05:36:41.337 回答