C++ C++;特别是“指针帮助”-&燃气轮机&引用;操作人员
嗨,伙计们,我对“->”接线员有点问题。这是我的密码: 和<代码>报价对*周时间表代码>在<代码>计划类中清除,而报价对在头文件中清除C++ C++;特别是“指针帮助”-&燃气轮机&引用;操作人员,c++,pointers,C++,Pointers,嗨,伙计们,我对“->”接线员有点问题。这是我的密码: 和报价对*周时间表在计划类中清除,而报价对在头文件中清除 struct OfferingPair { Offering * off ; OfferingPair * nextOff ; } Schedule::Schedule () { this->weeklySchedule=new OfferingPair[5]; for(int i=0;i<5;i++) {
struct OfferingPair
{
Offering * off ;
OfferingPair * nextOff ;
}
Schedule::Schedule ()
{
this->weeklySchedule=new OfferingPair[5];
for(int i=0;i<5;i++)
{
weeklySchedule[i]->off=NULL;
weeklySchedule[i]->nextOff=NULL;
}
}
我收到一个错误,上面写着:
base operand of ‘->’ has non-pointer type ‘OfferingPair’
但是weeklySchedule[i]是一个指针,我为什么不能使用“->”?。提前谢谢
weeklySchedule[i]
返回对象本身,而不是指针,因此必须使用
weeklySchedule[i].off=NULL;
weeklySchedule[i].nextOff=NULL;
我建议您将代码修改为:
std::vector<OfferingPair> weeklySchedule
std::vector周刊时间表
不过。这是Raight(c)要做的事情。
weeklySchedule[i]
返回对象本身,而不是指针,因此必须使用
weeklySchedule[i].off=NULL;
weeklySchedule[i].nextOff=NULL;
我建议您将代码修改为:
std::vector<OfferingPair> weeklySchedule
std::vector周刊时间表
不过。其他人已经指出了
->
与点(
)语法的问题
但我想在其他方面详细阐述一下
由于您正在初始化OfferingPair::off
和nextof
到NULL
的数据成员,因此这项工作可能应该在OfferingPair
默认构造函数中完成:
您可以使用std::vector
而不是原始的类C数组来存储上述结构的实例。
将数据成员添加到计划
类,如下所示:
std::vector<OfferingPair> m_weeklySchedule;
请注意代码是如何简化的
还要注意的是,在析构函数中不需要显式的delete[]
来释放数组动态分配的内存:std::vector
的析构函数将自动调用并处理该问题
此外,编译器生成的copy构造函数和copyoperator=
将正确处理成员级copy(调用相应的std::vector
copy操作),而不是使用原始的类C数组,您必须为copy构造函数和operator=
编写适当的代码(或者禁止他们,宣布他们是私人的)
编辑:
您似乎编辑了原始帖子,添加了新代码,特别是报价对
数据结构的一些草图:
struct OfferingPair
{
Offering * off;
OfferingPair * nextOff;
};
事实上,你有一个指向下一个
OfferingPair
的指针在OfferingPair
里面,这让我觉得也许你只需要一个OfferingPair
的链接列表?除非这是一个链接列表的学习练习,也许你只需要一个std::list
,或者一个C++11std::forward list
?其他方面dy指出了->
与点(
)语法的问题
但我想在其他方面详细阐述一下
由于您正在初始化OfferingPair::off
和nextof
到NULL
的数据成员,因此这项工作可能应该在OfferingPair
默认构造函数中完成:
您可以使用std::vector
而不是原始的类C数组来存储上述结构的实例。
将数据成员添加到计划
类,如下所示:
std::vector<OfferingPair> m_weeklySchedule;
请注意代码是如何简化的
还要注意的是,在析构函数中不需要显式的delete[]
来释放数组动态分配的内存:std::vector
的析构函数将自动调用并处理该问题
此外,编译器生成的copy构造函数和copyoperator=
将正确处理成员级copy(调用相应的std::vector
copy操作),而不是使用原始的类C数组,您必须为copy构造函数和operator=
编写适当的代码(或者禁止他们,宣布他们是私人的)
编辑:
您似乎编辑了原始帖子,添加了新代码,特别是报价对
数据结构的一些草图:
struct OfferingPair
{
Offering * off;
OfferingPair * nextOff;
};
事实上,您在
OfferingPair
中有一个指向下一个OfferingPair
的指针,这让我觉得您可能只需要一个OfferingPair
的链接列表?除非这是链接列表的学习练习,否则您可能只需要一个std::list
或一个C++11std::forward u list
?中的数组dex运算符的基本定义如下:
a[b]
=*(a+(b))
->
操作符的基本定义如下:
a->b
=(*a).b
所以当你写作时:
weeklySchedule[i]->off=NULL;
你写的是:
(*(*(weeklySchedule + i))).off=NULL;
请注意您是如何两次取消对指针的引用的。显然这是错误的!数组索引运算符的基本定义如下:
a[b]
=*(a+(b))
->
操作符的基本定义如下:
a->b
=(*a).b
所以当你写作时:
weeklySchedule[i]->off=NULL;
你写的是:
(*(*(weeklySchedule + i))).off=NULL;
请注意您是如何两次取消对指针的引用的。显然这是错误的!您说的“返回对象本身”是什么意思?weeklySchedule[i]指向包含off和nextOff指针的结构。@user1757052否,
weeklySchedule[i]
是一个包含off和nextof指针的结构…@user1757052 weeklySchedule是[OfferingPair,OfferingPair,…]
不是[OfferingPair*,OfferingPair*,…]
@user1757052,请标出最适合您的答案。“返回对象本身”是什么意思?weeklySchedule[i]指向包含off和nextOff指针的结构。@user1757052否,weeklySchedule[i]
是包含off和nextOff指针的结构。@user1757052 weeklySchedule是[OfferingPair,OfferingPair,…]
不是[OfferingPair*,OfferingPair*,…]
@user1757052,请标出最适合您的答案。“weeklySchedule[i]
是一个指针”-编译器不同意您的意见。因此