运行C++;涉及struct-tm的程序 我用Visual Studio 2012编写了一个C++的杂货库存程序。 一切顺利,正如预期的那样。文件作为命令行参数读入,用于用对象填充deque。我用来检查杂货店对象是否即将过期的函数使用了time\t和struct tm。尝试在Unix上运行程序时,我遇到一个涉及fstream的错误

运行C++;涉及struct-tm的程序 我用Visual Studio 2012编写了一个C++的杂货库存程序。 一切顺利,正如预期的那样。文件作为命令行参数读入,用于用对象填充deque。我用来检查杂货店对象是否即将过期的函数使用了time\t和struct tm。尝试在Unix上运行程序时,我遇到一个涉及fstream的错误,c++,unix,visual-studio-2012,fstream,C++,Unix,Visual Studio 2012,Fstream,以下是我得到错误的代码行: int main (int argc, char** argv) { deque<Grocery> groceries; deque<Grocery>::iterator iter; string filename = ""; if (argc > 1) { filename = argv[1]; fstream fileData; fileDat

以下是我得到错误的代码行:

    int main (int argc, char** argv) {

    deque<Grocery> groceries;
    deque<Grocery>::iterator iter;
    string filename = "";

    if (argc > 1) {
        filename = argv[1];
        fstream fileData;
        fileData.open(filename, ios::in | ios::out); //**error**
        //error check
        if (!fileData) {
            cout << "Error openeing file. Program aborting.\n";
            return 1;
        }
        string name;
        string expDate;
        string type;
        string quantity;

        while (!fileData.eof()) {
            Grocery temp;
            getline (fileData,name,'\t');
            temp.setName(name);
            getline (fileData,expDate,'\t');
            temp.setExpDate(expDate);
            getline (fileData,type,'\t');
            temp.setType(type);
            getline (fileData, quantity,'\n');
            temp.setQuantity(atoi (quantity.c_str()));
            groceries.push_back(temp);
        }   
        fileData.close();
    }
    return 0;
}
int main(int argc,char**argv){
德克杂货店;
迭代器iter;
字符串filename=“”;
如果(argc>1){
filename=argv[1];
fstream文件数据;
fileData.open(文件名,ios::in | ios::out);//**错误**
//错误检查
如果(!fileData){

我想你需要一个整洁的身材。
由于您在头文件中有声明,并且您可能已经将expDate从tm类型更改为tm*

我认为您需要一个干净的构建。
Inventory.cpp:24:45: error: no matching function for call to âstd::basic_fstream<char>::open(std::string&, std::_Ios_Openmode)â
fileData.open(filename, ios::in | ios::out);

由于您在头文件中有声明,并且您可能已经将expDate从tm类型更改为tm*

我认为您需要一个干净的构建。
Inventory.cpp:24:45: error: no matching function for call to âstd::basic_fstream<char>::open(std::string&, std::_Ios_Openmode)â
fileData.open(filename, ios::in | ios::out);

由于您在头文件中有声明,并且您可能已经将expDate从tm类型更改为tm*

我认为您需要一个干净的构建。
Inventory.cpp:24:45: error: no matching function for call to âstd::basic_fstream<char>::open(std::string&, std::_Ios_Openmode)â
fileData.open(filename, ios::in | ios::out);
由于您在头文件中有声明,并且您可能已经将expDate从tm类型更改为tm*

Inventory.cpp:24:45:错误:没有匹配的函数用于调用–std::basic\u fstream::open(std::string&,std:_Ios\u Openmode)–
Inventory.cpp:24:45: error: no matching function for call to âstd::basic_fstream<char>::open(std::string&, std::_Ios_Openmode)â
fileData.open(filename, ios::in | ios::out);
fileData.open(文件名,ios::in | ios::out);
构造函数仅在C++11模式下可用

您正在C++98模式下编译代码。编译时将
-std=gnu++11
传递给
g++

Inventory.cpp:24:45:错误:调用–std::basic_fstream::open(std::string&,std:_Ios\u Openmode)时没有匹配的函数
fileData.open(文件名,ios::in | ios::out);
构造函数仅在C++11模式下可用

您正在C++98模式下编译代码。编译时将
-std=gnu++11
传递给
g++

Inventory.cpp:24:45:错误:调用–std::basic_fstream::open(std::string&,std:_Ios\u Openmode)时没有匹配的函数
fileData.open(文件名,ios::in | ios::out);
构造函数仅在C++11模式下可用

您正在C++98模式下编译代码。编译时将
-std=gnu++11
传递给
g++

Inventory.cpp:24:45:错误:调用–std::basic_fstream::open(std::string&,std:_Ios\u Openmode)时没有匹配的函数
fileData.open(文件名,ios::in | ios::out);
构造函数仅在C++11模式下可用



您正在C++98模式下编译代码。编译时将
-std=gnu++11
传递到
g++

什么是
expDate
的数据类型对不起。下面是在我的.h文件中初始化的变量:time\t;struct tm*expDate;Wait.
expDate
struct tm*
?,因为
caltime()
返回指向内部对象的指针,该对象在许多不同条件下都会被覆盖,包括对
localtime()的另一个调用
。也就是说,你不能仅仅保存那个指针并期望它永远有效。如果
expDate
确实是
struct tm*expDate;
,那么这一行不会编译失败,假设你已经包含了
。所以要么它不是这样声明的,要么它不是错误所在的行。发布完整的代码。代码Oks OK。发布一个完整的例子来重现这个问题。
expDate
的数据类型是什么?很抱歉。下面是在我的杂货店.h文件中初始化的变量:time\t;struct tm*expDate;Wait。
expDate
是一个
struct tm*
?,因为
localtime()
返回指向内部对象的指针,该对象在许多不同条件下都会被覆盖,包括对
localtime()的另一个调用
。也就是说,你不能仅仅保存那个指针并期望它永远有效。如果
expDate
确实是
struct tm*expDate;
,那么这一行不会编译失败,假设你已经包含了
。所以要么它不是这样声明的,要么它不是错误所在的行。发布完整的代码。代码Oks OK。发布一个完整的例子来重现这个问题。
expDate
的数据类型是什么?很抱歉。下面是在我的杂货店.h文件中初始化的变量:time\t;struct tm*expDate;Wait。
expDate
是一个
struct tm*
?,因为
localtime()
返回指向内部对象的指针,该对象在许多不同条件下都会被覆盖,包括对
localtime()的另一个调用
。也就是说,你不能仅仅保存那个指针并期望它永远有效。如果
expDate
确实是
struct tm*expDate;
,那么这一行不会编译失败,假设你已经包含了
。所以要么它不是这样声明的,要么它不是错误所在的行。发布完整的代码。代码Oks OK。发布一个完整的例子来重现这个问题。
expDate
的数据类型是什么?很抱歉。下面是在我的杂货店.h文件中初始化的变量:time\t;struct tm*expDate;Wait。
expDate
是一个
struct tm*
?,因为
localtime()
返回指向内部对象的指针,该对象在许多不同条件下都会被覆盖,包括对
localtime()的另一个调用
。也就是说,你不能只保存那个指针,然后期望它永远有效。如果
expDate
确实是
struct tm*expDate;
,那么这一行不会编译失败,假设你已经包含了
。因此,要么它不是这样声明的,要么它不是这样的行