我不知道问题是什么。
#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;
有谁知道造成这种情况的原因是什么?我已经研究过,但似乎无法找到解决问题的任何东西。我假设我试图使用变量类型,但我找不到这个实例。
答案 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[];