非POD元素类型的可变长度数组&#39; set <int>&#39;

时间:2017-06-19 23:54:57

标签: c++

我不知道问题是什么。

#include <iostream>
#include <algorithm>
#include <fstream>
#include <set>
using namespace std;

int main() {
    ifstream infile("meeting.in");
    int FF, NumPaths;
    infile >> FF >> NumPaths;
    int Paths[NumPaths][4];
    set<int> Bessie_Times[FF];
    set<int> Elsie_Times[FF];
    for(int i=0;i<NumPaths;i++)
    {
        infile >> Paths[i][0] >> Paths[i][1] >> Paths[i][2] >> Paths[i][3];
    }
    sort(Paths,Paths+NumPaths);
}

在这些行中,我收到了以下错误:

    int Paths[NumPaths][4];
  

数组类型&#39; int [4]&#39;不可分配

    set<int> Bessie_Times[FF];
  

错误1:数组初始化程序必须是初始化列表

     

错误2:非POD元素类型的可变长度数组&#39; set&#39;

有谁知道造成这种情况的原因是什么?我已经研究过,但似乎无法找到解决问题的任何东西。我假设我试图使用变量类型,但我找不到这个实例。

2 个答案:

答案 0 :(得分:3)

g ++编译你的代码很好(排序除外)。我不知道是否违反了标准。但无论如何,在c ++中你应该使用stdlib中的容器:

#include <iostream>
#include <algorithm>
#include <fstream>
#include <set>
#include <array>

using namespace std;

int main()
{
  ifstream infile("meeting.in");
  int FF, NumPaths;
  infile >> FF >> NumPaths;

  std::vector<array<int, 4>> Paths(FF);
  std::vector<set<int>> Bessie_Times(FF);
  std::vector<set<int>> Elsie_Times(FF); 

  for(int i = 0; i < NumPaths; i++)
  {
    infile >> Paths[i][0] >> Paths[i][1] >> Paths[i][2] >> Paths[i][3];    
  }  

  sort(Paths.begin(), Paths.end());

  return 0;
}

不确定排序;也许你需要添加

sort(Paths[i].begin(), Paths[i].end());

内循环

答案 1 :(得分:1)

int Paths[NumPaths][4];//Array type 'int[4]' is not assignable

您正在尝试静态声明一个数组,其长度在编译时未知,但仅在运行时已知。你不能这样做,因为C ++不允许它。但是,您可以动态声明一个在运行时已知长度的数组:

int Paths[NumPaths][4]; // wrong

int *Paths[4]; // right
for (int i = 0; i < 4; i++)
  Paths[i] = new int[NumPaths]; 
set<int> Bessie_Times[FF];//Error 1: Array initializer must be an initializer list Error 2: variable length array of non-POD element type 'set<int>'`

同样,这变为:

set<int> Bessie_Times[FF]; // wrong
set<int> *Bessie_Times = new set<int>[FF]; // right

请注意,您必须记住在程序结束时释放所有动态内存:

delete Paths[][];
delete BessieTimes[];