更新:
我看到我在这里造成了很多混乱,sry回合那些家伙...感谢罗马与矢量的想法^^
澄清我的问题:我希望通过将整数作为参数传递(我不想为dem数组创建全局变量或局部变量)并将它们复制,从而将结构数组直接变为创建的类(在main()中)进入班级成员
问题是我在课堂初始化时失败了,我的尝试:
struct _Note
{
int nFrequenz;
int nTakt;
};
class _Chart
{
public:
_Chart( std::vector<_Note> vNotes )
{
for( int i = 0; i < vNotes.size(); i++ )
this->_chart.push_back( vNotes[i] );
}
private:
std::vector<_Note> _chart;
};
void main()
{
_Chart x(
{ {1,2}, {2,3} }
);
// not working, wrong initialization
// still confused about the brackets ^^
getchar();
}
答案 0 :(得分:2)
作为参数传递时,struktur p[]
衰减为指针(类似于struktur* p
)。在确定元素数量时,这个指针的大小肯定不是你想要的。
相反,为什么不提供类似于标准容器的两个迭代器构造函数?
答案 1 :(得分:2)
你也需要传递元素数:
klasse( struktur p[], size_t count )
{
_chart = new struktur[count];
// copy array in one shot as no deep copy is needed here.
memcpy(_chart, p, count * sizeof(struktur));
}
答案 2 :(得分:0)
数组在传递时衰减为指针。因此,您必须将数组中的元素数作为附加参数传递给函数。但是,在这种情况下,您有一个选项。
将glob
定义移至klasse
声明之上。然后在构造函数中,您应该能够获得sizeof(glob)/sizeof(struktur);
的对象计数。你应该能够动态分配并在那之后进行成员明智的复制。
答案 3 :(得分:0)
为什么不使用std :: vector容器模板?
class klasse
{
public:
klasse(std::vector<struktur>& strs)
{
_chart = new struktur[strs.size()];
for( int i = 0; i < strs.size(); i++ )
{
this->_chart[i] = strs[i];
}
}
private:
struktur* _chart;
};
在main()中:
void main()
{
std::vector<struktur> myStructs;
myStruct.push_back(glob[0]);
myStruct.push_back(glob[1]);
myStruct.push_back(glob[2]);
klasse y(myStructs);
getchar();
}
这很简单而优雅。
[更新。] 是的,在您的示例中sizeof(p)
将等于sizeof(uintptr_t
),因为p是指针类型。