gpt4 book ai didi

c++ - XCode、命名空间、C++ 和代码可移植性

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:01 34 4
gpt4 key购买 nike

我编写的一些 C++ 源代码在 Windows 7 上使用 Visual Studio 2010 编译并运行良好。但是当我在 Mac OS X 10.8 Mountain Lion 上使用 XCode 4.4.1 尝试它时,它无法编译。我能够按照下面的详细说明修复它,但我有兴趣首先找出我做错了什么以及为什么需要修复。

具体来说,考虑以下类声明:

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 提示说我没有一个可行的“乘客”构造函数。我有一个默认的乘客构造函数,所以这不是问题。基于我在 earlier question on this site 中发现的内容我也尝试使用 persons.erase 而不是调整大小,但没有成功。

最终,我能够通过使用 persons.vector::resize (npassengers); 获得要在 Mac 上编译的代码。而不是 persons.resize (npassengers); .我想知道为什么有必要在 Mac 端这样做,以及为什么它在 Windows 端没有问题。

一个相关的问题是,using namespace std; 是不好的做法吗?在你的代码的顶部,相反,我应该指定 std::cout ETC。?如果是这样,为什么?

请原谅我的知识不足,感谢您的帮助!

编辑:肖恩建议我出示我的乘客代码,所以这里是:

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

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

最佳答案

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

#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() 获取它。

关于c++ - XCode、命名空间、C++ 和代码可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12048427/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com