如何声明结构类型的向量?

时间:2013-10-15 12:55:38

标签: c++ vector structure

我的代码存在问题。在这里,我想编写一个程序,它将从文件中获取输入并将其存储在结构向量中,但是当我声明结构类型向量时,它显示错误。

#include<iostream>
#include<fstream>
#include<vector>

using namespace std;

struct input
{
    char process[10];
    int burst_time;
    int arrival_time;
}input;

int main()
{
    ifstream myfile;
    vector<input> store;// problem with initializing vector

    myfile.open("input.txt",ios::in);

    if(myfile.is_open())
    {
        while(!myfile.eof())
        {
            myfile>>input.process;
            myfile>>input.burst_time;
            myfile>>input.arrival_time;

            store.push_back(input);//showing problem in this line also
        }
    }

    myfile.close();
    return 0;
}

2 个答案:

答案 0 :(得分:7)

您已将名称input隐藏为struct input的实例。取消隐藏它:

struct intput
{
 // as before
};

答案 1 :(得分:0)

这是非常简单的事情:

宣布

struct input
{
    char process[10];
    int burst_time;
    int arrival_time;
} input;

你正在定义一个名为input的结构类型,但也是一个名为input的变量,所以在主要的编译器混淆,它不知道你是否引用变量或类型,所以只需重命名struct变量声明并将其称为自己的名称,如下所示:

#include<iostream>
#include<fstream>
#include<vector>

using namespace std;

struct input // Type defined as "input"
{
    char process[10];
    int burst_time;
    int arrival_time;
} input1; // And variable defined as "input1" consider this to be declared in main, to be a local variable.

int main()
{
    ifstream myfile;
    vector<input> store{};// problem solved referring to type and not variable

    myfile.open("input.txt",ios::in);

    if(myfile.is_open())
    {
        while(!myfile.eof())
        {
            myfile>>input1.process; // Here now the compiler understands that you are referring to the variable and not the type
            myfile>>input1.burst_time;
            myfile>>input1.arrival_time;

            store.push_back(input1);
        }
    }

    myfile.close();
    return 0;
}

这样编译器就不会抱怨。

还要考虑始终使用第一个字符作为大写来声明一个新类型(如您的结构)。相反,Input和第一个字符小写input的变量不会混淆并避免这种错误。