Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;特别是“指针帮助”-&燃气轮机&引用;操作人员_C++_Pointers - Fatal编程技术网

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构造函数和copy
operator=
将正确处理成员级copy(调用相应的
std::vector
copy操作),而不是使用原始的类C数组,您必须为copy构造函数和
operator=
编写适当的代码(或者禁止他们,宣布他们是私人的)

编辑: 您似乎编辑了原始帖子,添加了新代码,特别是
报价对
数据结构的一些草图:

struct OfferingPair
{
  Offering     * off;
  OfferingPair * nextOff;
};

事实上,你有一个指向下一个
OfferingPair
的指针在
OfferingPair
里面,这让我觉得也许你只需要一个
OfferingPair
的链接列表?除非这是一个链接列表的学习练习,也许你只需要一个
std::list
,或者一个C++11
std::forward list

其他方面dy指出了
->
与点(
)语法的问题

但我想在其他方面详细阐述一下

由于您正在初始化
OfferingPair::off
nextof
NULL
的数据成员,因此这项工作可能应该在
OfferingPair
默认构造函数中完成:

您可以使用
std::vector
而不是原始的类C数组来存储上述结构的实例。 将数据成员添加到
计划
类,如下所示:

  std::vector<OfferingPair> m_weeklySchedule;
请注意代码是如何简化的

还要注意的是,在析构函数中不需要显式的
delete[]
来释放数组动态分配的内存:
std::vector
的析构函数将自动调用并处理该问题

此外,编译器生成的copy构造函数和copy
operator=
将正确处理成员级copy(调用相应的
std::vector
copy操作),而不是使用原始的类C数组,您必须为copy构造函数和
operator=
编写适当的代码(或者禁止他们,宣布他们是私人的)

编辑: 您似乎编辑了原始帖子,添加了新代码,特别是
报价对
数据结构的一些草图:

struct OfferingPair
{
  Offering     * off;
  OfferingPair * nextOff;
};

事实上,您在
OfferingPair
中有一个指向下一个
OfferingPair
的指针,这让我觉得您可能只需要一个
OfferingPair
的链接列表?除非这是链接列表的学习练习,否则您可能只需要一个
std::list
或一个C++11
std::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]
是一个指针”-编译器不同意您的意见。因此