【发布时间】:2014-10-23 01:01:08
【问题描述】:
所以我已经让这个程序在 Windows 中运行,并且我正在尝试让它也可以在 Linux 机器上运行。我相信 Linux 机器正在运行一个过时版本的 g++ 编译器,但这超出了我的控制。无论如何,这是我的功能:
for (vector<string>::iterator i = groups.begin(); i != groups.end(); ++i)
{
inStream.open((*i + "List.txt").c_str());
while (getline(inStream, next))
{
if (next == n) {
memberOf.push_back(*i);
}
}
inStream.close();
}
问题在于 inStream.open() 调用。在 Windows 中这工作正常,但在 Linux 中似乎 *i(例如,假设 *i 指向“Tigers”)被覆盖,因此调用只是 inStream.open("List.txt");而不是 inStream.open("TigersList.txt");
我尝试了各种方法来解决这个问题,例如设置 string k = *i;从某种意义上说,如果我调用 cout
例如:
k += "List.txt";
k.append("List.txt");
等等。在 Linux 中似乎没有任何效果,但是我尝试过的所有东西在 Windows 中都有相同(正确)的最终结果。
我做错了什么???
编辑:inStream 是一个 ifStream 对象。 memberOf 是另一个字符串向量。
【问题讨论】:
-
与您的问题无关,但不是使用迭代器的凌乱的
for循环,而是在 C++ 11 中尝试基于范围的for循环:for ( string s : groups ) {inStream.open( ( s + "List.txt" ).c_str() );...(也许您过时的编译器无法识别这个构造..)