鉴于此问题 - 例证最小代码:
#include <fstream>
#include <string>
using std::ifstream;
using std::string;
string TEST_PATH;
string TRAIN_PATH;
enum DataContext
{
TRAINING, TESTING
};
void StreamData(DataContext context)
{
ifstream dataFile = (context == TRAINING) ? ifstream(TRAIN_PATH) : ifstream(TEST_PATH);
dataFile.close();
}
void StreamData2(DataContext context)
{
ifstream datafile;
datafile.open((context == TRAINING) ? TRAIN_PATH: TEST_PATH);
datafile.close();
}
int main()
{
StreamData(TRAINING);
StreamData2(TRAINING);
return 0;
}
我正在实施AI Iterative Dichotomizer,但这与此问题无关。相关的是两个外部测试文件,一个带有训练数据,另一个带有测试数据。某些控制流程受当时正在处理的数据类型的控制,简单的枚举用于简化这种关联。
StreamData旨在根据当前上下文的检查有条件地指导初始化ifstream。它与三元运算符一起使用。在Visual Studio(这意味着什么),但也在cygwin g ++ v5.1.0中,使用StreamData函数编写成功编译,并按照我的期望执行。(在我的真实程序中,实际上返回了一些内容)。但是,在Debian,g ++ v4.9.2中,使用该函数会产生一个编译器的文章。我不会复制整个输出,除非有必要,但亮点包括警告g ++正在删除默认 ifstream构造,因为它会形成错误。然后强烈批评试图调用已删除的函数。
&#34; g ++ -o TT -std = c ++ 11 ./ThisCode.cpp"是在两种环境中执行的g ++命令。
StreamData2是StreamData的自然替代品,它在任何地方编译都很好。
我的问题通过StreamData2解决了。我留下了一个问题。 StreamData是否有效C ++ 11 /使用三元运算符?编译失败,g ++版本较少,是错误/错误实现吗?
感谢您的任何见解。