C++ 在结构中保存整数数组。无法正确定义结构
我想在我的结构中保存一个整数数组C++ 在结构中保存整数数组。无法正确定义结构,c++,arrays,libharu,C++,Arrays,Libharu,我想在我的结构中保存一个整数数组 struct HPDF_TableAttributes { HPDF_REAL rows; HPDF_REAL cols; HPDF_REAL rowH; HPDF_REAL colW; HPDF_REAL tabX; HPDF_REAL tabY; HPDF_REAL tabH; HPDF_REAL tabW; HPDF_Font font; HPDF_REAL fontSize;
struct HPDF_TableAttributes
{
HPDF_REAL rows;
HPDF_REAL cols;
HPDF_REAL rowH;
HPDF_REAL colW;
HPDF_REAL tabX;
HPDF_REAL tabY;
HPDF_REAL tabH;
HPDF_REAL tabW;
HPDF_Font font;
HPDF_REAL fontSize;
int colRatios[]; /// HERE
};
似乎不管我怎么做,编译器希望我在这里初始化它?我必须那样做吗?我正在尝试按照以下的思路做一些事情以供使用
HPDFTableAttributes oTACent;
oTACent.rows = 3; oTACent.cols = 3;
oTACent.rowH = 20; oTACent.colW = pageWidth-70/oTACent.cols;
oTACent.tabH = oTACent.rows * oTACent.rowH;
oTACent.tabW = oTACent.cols * oTACent.colW;
oTACent.tabX = 35; oTACent.tabY = pageHeight - oTACent.tabH - 45;
oTACent.font = fontTimesBold; oTACent.fontSize = 20;
oTACent.colRatios = [1, 1, 2]; /// HERE
然后我将这些属性发送给我的函数,该函数使我成为一个表,并使用该整数数组中的值与沿同一行的空格列的比率
void CReport::putTableOnPdf(HPDF_Page page, HPDFTableAttributes tabAtt, array_2d<CString> tabDat)
{
// Table Outline
HPDF_Page_SetLineWidth (page, 1);
HPDF_Page_Rectangle (page, tabAtt.tabX, tabAtt.tabY, tabAtt.tabW, tabAtt.tabH);
// Table row lines
HPDF_REAL rowsPut = 0;
while(rowsPut < tabAtt.rows)
{
rowsPut++;
HPDF_Page_MoveTo (page, tabAtt.tabX, tabAtt.tabY + rowsPut*tabAtt.rowH);
HPDF_Page_LineTo (page, tabAtt.tabX + tabAtt.tabW, tabAtt.tabY + rowsPut*tabAtt.rowH);
}
// Table col lines
/*int colRatioSum = 0;
for(int i = 0; i < tabAtt.colRatios.length; i++)
colRatioSum += tabAtt.colRatios[i];
tabAtt.colW = tabAtt.colW / colRatioSum;*/ /// HERE
HPDF_REAL colsPut = 0;
while(colsPut < tabAtt.cols)
{
colsPut++;
HPDF_Page_MoveTo (page, tabAtt.tabX + colsPut*tabAtt.colW, tabAtt.tabY);
HPDF_Page_LineTo (page, tabAtt.tabX + colsPut*tabAtt.colW, tabAtt.tabY + tabAtt.tabH);
}
HPDF_Page_Stroke (page);
}
void CReport::putTableOnPdf(HPDF_页面,HPDFTableAttributes选项卡,数组_2d选项卡)
{
//表格大纲
HPDF_页面_设置线宽(第1页);
HPDF_页面_矩形(页面,tabAtt.tabX,tabAtt.tabY,tabAtt.tabW,tabAtt.tabH);
//表行行
HPDF_REAL rowsPut=0;
while(rowsPut 在C++中,数组的大小是它的一部分。*有一个特殊的规则允许数组声明从初始化器中推断其大小,所以你不必总是显式地写类型。
在某些情况下,您也可以编写和使用不完整的类型,但您不能对它们执行任何需要完整类型的操作
所以这里的问题是,您正在编写一个不完整的类型,并使用它执行一些需要完整类型的操作(即,声明该类型的对象)。添加初始值设定项是声明数组大小从而完成类型的一种方法,这样可以避免错误
如果您真正想说的是“最后一个字段是一个int集合”,那么您需要使用一个可以表示该类型的类型(同样,数组具有固定数量的元素)。在C++中最明显的解决方案是<代码> STD::vector < /代码>。使用std::vector
可以几乎准确地编写伪代码:
oTACent.colRatios = {1, 1, 2};
另一个选项是使用指针,您可能会看到但不应该写入。定义C++,这样就可以使用数组中的数组指针。由于指针类型不包括数组大小,因此同一指针类型可用于任何大小的数组
一些编译器支持可变长度数组成员作为扩展,其中数组的大小是在初始化结构时确定的,但这不是标准C++,它仍然需要在初始化时知道大小(而不是从稍后的赋值,就像在您的伪代码中分配给数组)。还有另一个扩展名为“flexible array”,其中最后一个成员可以在没有大小的情况下声明,然后手动为整个结构分配足够的内存,再加上您希望数组的大小。数组的大小必须在声明时已知,因为它是其类型的一部分。因此,您应该将其更改为:
int colRatios[3];
此外,分配给数组的方式与您尝试的方式不同:
oTACent.colRatios = [1, 1, 2];
<>在C++中没有这样的语法。如果您想轻松地分配这样的值,可以使用C++11和std::vector:
std::vector<int> colRatios;
// ...
oTACent.colRatios = {1, 1, 2};
std::vector colrations;
// ...
oTACent.colRatios={1,1,2};
>代码> [ 1, 1, 2 ] < /C> >不是C++语法