大家好我有“ - >”的问题运营商。这是我的代码:
并OfferingPair * weeklySchedule ;
在Schedule
类内部删除,并且在一个头文件中删除了OfferingPair。
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;
}
}
因为:
weeklySchedule[i]->off=NULL;
weeklySchedule[i]->nextOff=NULL;
行我得到一个错误,上面写着:
base operand of ‘->’ has non-pointer type ‘OfferingPair’
但是每周计划[i]是一个指针,为什么我不能使用“ - &gt;” ?。提前致谢。
答案 0 :(得分:14)
weeklySchedule[i]
返回对象本身,而不是指针,因此您必须使用.
weeklySchedule[i].off=NULL;
weeklySchedule[i].nextOff=NULL;
我建议您将代码修改为:
std::vector<OfferingPair> weeklySchedule
虽然。这是RAIIght(c)要做的事情。
答案 1 :(得分:0)
其他人已经指出了->
与点(.
)语法的问题。
但我想在其他方面详细说明。
由于您要将OfferingPair::off
和nextOff
数据成员初始化为NULL
,因此这项工作可能应在OfferingPair
默认构造函数中完成:
struct OfferingPair
{
....
OfferingPair()
: off(NULL)
, nextOff(NULL)
{
}
};
您可以使用std::vector
而不是原始C类数组来存储上述结构的实例。
将数据成员添加到Schedule
类,如下所示:
std::vector<OfferingPair> m_weeklySchedule;
然后在默认构造函数中创建一个包含5个项目的std::vector
:
Schedule::Schedule()
: m_weeklySchedule(5)
{
}
请注意您的代码简化。
另请注意,在析构函数中不需要显式delete[]
来释放数组动态分配的内存:std::vector
的析构函数将自动调用照顾好。
此外,编译器生成的复制构造函数和复制operator=
将使用成员复制(调用相应的std::vector
复制操作)做正确的事情,而不是原始C类数组你必须为复制构造函数和operator=
编写适当的代码(或禁止它们,声明它们private
)。
修改强>
您似乎已经编辑了原始帖子,添加了新代码,特别是OfferingPair
数据结构的一些草图:
struct OfferingPair
{
Offering * off;
OfferingPair * nextOff;
};
你有{em>指向OfferingPair
内的下一个 OfferingPair
的事实让我觉得你可能只需要Offering
的链接列表?除非这是链接列表的学习练习,否则您可能需要std::list<Offering>
或C ++ 11 std::forward_list<Offering>
?
答案 2 :(得分:0)
数组索引运算符基本上定义如下:
a[b]
= *(a + (b))
->
运算符基本上定义如下:
a->b
= (*a).b
所以当你写:
weeklySchedule[i]->off=NULL;
你写的是:
(*(*(weeklySchedule + i))).off=NULL;
注意两次取消引用指针的方法。显然这是不正确的!